IPアドレスまたは国名から(「アジア/カルカッタ」)のようなタイムゾーン地域を取得するためにPHPで利用できる方法があるかどうか誰か教えてください。
説明:
国に基づいてユーザーのタイムゾーンを設定しようとしています。私は彼のIPアドレスからユーザーの国を取得していますが、その国でDSTがオンになっているかどうかを確認するには、その国のタイムゾーン地域(「アジア/カルカッタ」)が必要です。誰かがPHPで適切なソリューションを提供してもらえますか?
IP アドレスの使用
タイムゾーンは、風変わりなルールに従う場合があります。IP ジオロケーションは正確とは言えません (一部のベンダーの主張にもかかわらず)。
そうは言っても、MaxMind のような Geo IP 製品を使用して都市と国を確実に見つけることができます。
http://www.maxmind.com/app/geolite
PHPモジュールを含む
http://www.maxmind.com/app/php
その後、MaxMind API を使用して、ユーザーのタイムゾーンを試して推定することができます
http://www.maxmind.com/app/faq#timezone
別
IP アドレスではなくユーザーの時計に依存したい場合、jsTimezoneDetect は非常にうまく機能します (完全ではありませんが)。
https://bitbucket.org/pellepim/jstimezonedetect/wiki/Home
概要
いずれの手法も、すべての場合で完全には機能しません。ユーザーが自動生成されたタイムゾーンの提案を修正できるようにしてください。
ユーザークライアントの設定に基づいて、どのタイムゾーンが設定されているかを確認することをお勧めします。たぶん、ユーザーがタイムゾーンにいるという状況がありますが、それは彼が望んでいないことです。
簡単な可能性の1つはユーザーに尋ねることですが、それは簡単です。
JavaScriptを使用すると、UTCから数分でオフセットを見つけることができます。また、クライアントが夏時間(DST)のある国にいて、dstがアクティブであるかどうかを確認することもできます。これは、2つの日付オブジェクトの時刻を比較することで実行できます。1つは月、もう1January
つは月July
です。
var dst1, dst2, expires, hemisphere, now;
now = new Date(); expires = new Date(); dst1 = new Date(); dst2 = new Date();
expires.setTime(now.getTime() + 31536000000);
setCookie('timezone_offset', now.getTimezoneOffset(), expires, '/');
dst1.setDate(1);
dst1.setMonth(1);
dst2.setDate(1);
dst2.setMonth(7);
if (parseInt(dst1.getTimezoneOffset()) === parseInt(dst2.getTimeZoneOffset())) {
setCookie('timezone_dst', 0, expires, '/');
} else {
hemisphere = parseInt(d1.getTimezoneOffset()) - parseInt(d2.getTimezoneOffset());
if ((hemisphere > 0 && parseInt(d1.getTimezoneOffset()) === parseInt(now.getTimezoneOffset())) || (hemisphere < 0 && parseInt(d2.getTimezoneOffset()) === parseInt(now.getTimezoneOffset()))) {
setCookie('timezone_dst', '0', expires, '/');
} else {
setCookie('timezone_dst', '1', expires, '/');
}
}
PHPでCookieを読み取り、timezone_name_from_abbr()でそれらの情報を解釈します。
$timezone = timezone_name_from_abbr('', $_COOKIE['timezone_offset'] * 60, $_COOKIE['timezone_dst']);