あなたのためのヘッドスクラッチャー。
IPInfoDBのAPIからgeoIPデータを取得していますが、DSTを含むUTCからのタイムゾーンオフセットが返されます(現在反映されている場合)。
たとえば、私はEST(-5)に住んでいて、現在はDSTであるため、geo IP APIは-04:00
オフセットとして()を返します。
DSTはひどい頭痛の種なので、これは素晴らしいことです。しかし、驚いたことに、それは別の頭痛の種を引き起こしました。
このデータをPHPにロードして、AJAXを介してアプリケーションに渡します。アプリにIPアドレスの現地時間をライブで表示したいのですが。
私はそれをすべて完全に設定しましたが、AJAXを介して渡すために現在の時間date('H');
と分を取得できるように、オフセットに一致するようにPHPタイムゾーンを設定する方法を見つけようと夢中になっています。date('i');
そのオフセットに基づいて現在の時間と分を表示できる特定の関数があるかどうか、またはオフセットに基づいてタイムゾーンを設定する実用的な方法があるかどうかはわかりません(有効な場合はDSTがすでに適用されています) 。
私はこれに対する答えを見つけるためにGoogleを検索して検索してきましたが、DSTがすでに適用されているため、私が行っていることはより具体的です。
PHP.netで、トリックを実行しているように見える関数が1つ見つかりました(自分のタイムゾーンで機能し、正しい時刻を返します)が、PSTなどの他のタイムゾーンでは、オフセットが正しい場合でも、本来より1時間遅れて返されます(-07:00
DSTを使用)。
関数から返されるタイムゾーンがChile/EasterIsland
原因だと感じています。できれば、これは米国でのみ機能するようにしますが、世界中で機能する必要があります。
これが私が今持っている機能です。非常に厄介なコードを許してください。私はここ数時間、解決策を見つけようとしてたくさんのことをいじっています。
ほとんどの機能はオンラインで見つかりました。
function offsetToTZ($offset) {
switch((string) $offset) {
case '-04:30' : return 'America/Caracas'; break;
case '-03:30' : return 'Canada/Newfoundland'; break;
case '+03:30' : return 'Asia/Tehran'; break;
case '+04:30' : return 'Asia/Kabul'; break;
case '+05:30' : return 'Asia/Kolkata'; break;
case '+05:45' : return 'Asia/Kathmandu'; break;
case '+09:30' : return 'Australia/Darwin'; break;
}
$offset = (int) str_replace(array('0',0,':00',00,'30',30,'45',45,':','+'),'', (string) $offset);
$offset = $offset*60*60;
$abbrarray = timezone_abbreviations_list();
foreach ($abbrarray as $abbr) {
foreach($abbr as $city) {
if($city['offset'] == $offset) {
return $city['timezone_id'];
}
}
}
return false;
}
そこにある特定のタイムゾーンのスイッチ/ケースを含めまし:30
た:45
。スイッチ/ケースを必要とせずにそれを含める方法があるかもしれません。
注:オフセットは、常にそのまま、+00:00
または-00:00
geoIPAPIから返されます。
助けや正しい方向へのポイントをいただければ幸いです。私はPHPの初心者ではありませんが、オフセットは私にとって新しい話です。ありがとう!