イベントサイトをやっています。localhost の MySQL データベースから UTC 時刻を取得し、PHP を使用してページにエコーし、Javascript を使用してユーザーのタイムゾーンに変換します。何らかの理由で、JavaScript は、MySQL から取得した時間よりも 2 時間遅れた時間を提供します。私と私のサーバーの両方がマウンテン標準タイムゾーンにあるため、Javascript は日付を 6 時間戻す必要がありますが、代わりに日付は 8 時間戻されます。サマータイムでさえ、2 時間ではなく 1 時間の違いしか考慮していません。
PHP タイムスタンプを日付オブジェクトに変換し、YYYY-mm-dd HH:ii:ss 形式 (jQuery を使用) で出力するための Javascript を次に示します。
function leadingzeros(string){
if (string.toString().length == 1){
string = "0" + string;
}
return string;
}
$(document).ready(function(){
var thisdate = new Date(<?php echo (strtotime($row['start'])*1000);?>);
$("#jsdate").html(
thisdate.getFullYear()+"-"+leadingzeros((thisdate.getMonth()+1))+"-"+ leadingzeros(thisdate.getDate())+" "+
leadingzeros(thisdate.getHours())+":"+leadingzeros(thisdate.getMinutes())+":"+leadingzeros(thisdate.getSeconds())
);
});
ドキュメント本体の PHP は次のとおりです。
<?php
$row = mysqli_fetch_assoc($result);
echo "<ul><li>MySQL datetime object: ".$row['start']."</li>".
"<li>PHP Unix timestamp: ".strtotime($row['start'])."</li>".
"<li>PHP date string: ".date("Y-m-d H:i:s",strtotime($row['start']))."</li>".
"<li>PHP date minus 6 hours (which is our timezone offset): ".date("Y-m-d H:i:s",strtotime($row['start']) - (6*3600))."</li>".
"<li>Javascript date: <span id='jsdate'></span></li></ul>";
?>
以下を出力します。
- MySQL 日時オブジェクト: 2012-04-07 23:00:00
- PHP Unix タイムスタンプ: 1333832400
- PHP 日付文字列: 2012-04-07 23:00:00
- PHP 日付から 6 時間 (タイムゾーン オフセット) を差し引いた値: 2012-04-07 17:00:00
- Javascript 日付: 2012-04-07 15:00:00
私が読んだドキュメントのどれも答えをもたらしません。Javascript の日付が MST の PHP の日付より 2 時間遅れているのはなぜですか?