可能性のある複製:
Webユーザーのタイムゾーンを特定するにはどうすればよいですか?
これを行う最良の方法はどれですか? phpまたはjavascript。誰かが私にいくつかのスニペットを提供できますか?ありがとう。
これにより、タイムゾーンがPHP変数として取得されます。jQueryとPHPを使用して関数を作成しました。これはテストされ、機能します!
タイムゾーンを変数として使用するPHPページで、ページの上部近くに次のコードスニペットを配置します。
<?php
session_start();
$timezone = $_SESSION['time'];
?>
これは、今作成しようとしているセッション変数「time」を読み取ります。
同じページの<head>
セクション、最初にjQueryを含める必要があります。
<script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js"></script>
<head>
セクション、このjQueryを貼り付けます。
<script type="text/javascript">
$(document).ready(function() {
if("<?php echo $timezone; ?>".length==0){
var visitortime = new Date();
var visitortimezone = "GMT " + -visitortime.getTimezoneOffset()/60;
$.ajax({
type: "GET",
url: "http://domain.com/timezone.php",
data: 'time='+ visitortimezone,
success: function(){
location.reload();
}
});
}
});
</script>
気づいたかもしれませんが、URLを実際のドメインに変更する必要があります。
最後に一つだけ。おそらく、timezone.phpが一体何なのか疑問に思うでしょう。まあ、これは単純です:(timezone.phpと呼ばれる新しいファイルを作成し、上記のURLでそれを指します)
<?php
session_start();
$_SESSION['time'] = $_GET['time'];
?>
これが正常に機能する場合、最初にページをロードし、JavaScriptを実行して、ページをリロードします。これで、$ timezone変数を読み取って、それを自由に使用できるようになります!現在のUTC/GMTタイムゾーンオフセット(GMT -7)または現在のタイムゾーンを返します。
詳細については、私の blog をご覧ください。
乾杯
</Westy92>
サーバー側では、JavaScriptほど正確ではありません。一方、時にはそのようなタスクを解決する必要があります。この場合の可能な解決策を共有するために、この答えを書きます。
ユーザーのタイムゾーンを決定する必要がある場合は、Geo-IPサービスを介して実行できます。それらのいくつかはタイムゾーンを提供します。たとえば、これは( http://smart-ip.net/geoip-api )助けになります:
<?php
$ip = $_SERVER['REMOTE_ADDR']; // means we got user's IP address
$json = file_get_contents( 'http://smart-ip.net/geoip-json/' . $ip); // this one service we gonna use to obtain timezone by IP
// maybe it's good to add some checks (if/else you've got an answer and if json could be decoded, etc.)
$ipData = json_decode( $json, true);
if ($ipData['timezone']) {
$tz = new DateTimeZone( $ipData['timezone']);
$now = new DateTime( 'now', $tz); // DateTime object corellated to user's timezone
} else {
// we can't determine a timezone - do something else...
}
オデッドが答えたように。 JavaScriptでこの種の検出機能を使用する必要があります。
私はこれに苦労し、オフセットだけでは十分ではないことに気付きました。たとえば、夏時間に関する情報は提供されません。最終的に、zoneinfoデータベースキーにマップするコードをいくつか書きました。
1年あたりのいくつかの日付をチェックすることにより、タイムゾーンをより正確に決定できます。
ここでスクリプトを試してください: http://jsfiddle.net/pellepim/CsNcf/
システムのタイムゾーンを変更し、実行をクリックしてテストするだけです。 chromeを実行している場合は、各タブで新しいテストを行う必要があります(タイムゾーンの変更を取得するにはsafarを再起動する必要があります)。
コードの詳細を確認するには: https://bitbucket.org/pellepim/jstimezonedetect/