4

イベントサイトをやっています。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 時間遅れているのはなぜですか?

4

2 に答える 2

0

このコードを使用して、js で日付を警告するだけです。

var thisdate = new Date(<?php echo (strtotime('2012-04-07 23:00:00')*1000);?>);
    alert(thisdate);
    alert(<?php echo (strtotime('2012-04-07 23:00:00')*1000);?>);

私が得たものは ここに画像の説明を入力

したがって、gmt に関して時間を取得できます。PHP では、mysql サーバーでタイム ゾーンが構成されている必要があります。心配する必要はありません。

于 2012-09-28T09:31:15.110 に答える
0

これが発生する理由は、特定の日付/時刻を解析するときにデフォルトで設定をstrtotime()使用するため、それに応じて結果が補正されるためです。date.timezone

これを解決するには、次のようにデータベースからタイムスタンプを設定date.timezoneするEtc/UTCか「固定」します。

strtotime("{$row['start']} GMT")
于 2012-09-24T09:32:11.277 に答える