2012-04-07 2 views
4

私はイベントサイトで作業しています。ローカルホストのMySQLデータベースからUTC時刻を取得し、PHPを使用してそれらをページにエコーし、Javascriptを使用してユーザーのタイムゾーンに変換します。なんらかの理由で、Javascriptは私がMySQLから得た時間から2時間遅れています。自分自身と私のサーバーの両方がMountain Standard Timezoneにあるので、Javascriptは日付を6時間戻しますが、代わりに日付は8時間戻ってきます。夏時間でさえ、2時間ではなく1時間の時間差だけを占めます。Javascript日付オブジェクトがタイムゾーンのオフセットを適切に調整していない

は、ここで日付オブジェクトにPHPのタイムスタンプを翻訳し、YYYY-MM-DD HHでそれを出力するためのJavascriptです:II:SS形式(jQueryのを使用しています):

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のdatetimeオブジェクト:2012-04-07午前23時00分00秒
  • PHP Unixタイムスタンプ:1333832400
  • PHPの日付文字列:(私たちのタイムゾーンがオフセットされます)2012年4月7日午後11時00分〇​​〇秒
  • PHPの日付マイナス6時間:2012-04-07午後5時○○分00秒
  • JavaScriptのDate:私が読んだ文書の2012-04-07午後三時00分00秒

なしには答えが得られます。 MSTのPHP日付の2時間後にJavascriptの日付が表示されるのはなぜですか?

+0

はあなたのサーバ時間であり、クライアントマシンの時間は同じですか?はいの場合はタイムゾーンも同じですか? – nandu

+0

ここにお試しください:http://jsfiddle.net/wQMTu/ - あなたは何を見ますか? – Alexander

+0

答えはありませんが、これは役立ちます:時間の値をUTCで保存して輸送し、ユーザーに表示される場合、いつ、どこで、どこで、現地時間に変換するかをお勧めします。そうするならば、あなたのサーバがMSTであり、あなたのブラウザが何か他のものであることは重要ではありません。これは、大きなカテゴリのバグを排除するのに役立ちます。それは簡単に再ホスティングすることができます。等々。 – Cheeso

答えて

0

strtotime()は、指定された日付/時刻を解析するときにデフォルトでdate.timezoneの設定を使用するため、結果が適切に補正されるためです。

strtotime("{$row['start']} GMT") 
0

私はこのコードを使用して、JSの日付を警告:

は、これを解決するには、いずれかのEtc/UTCからdate.timezoneまたは「アンカー」そうのようなデータベースからタイムスタンプを設定することができます。私が得たもの

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);?>); 

uは心配する必要はありませんzone.so PHPとMySQLサーバが時間を設定しておく必要があり.INので、uはGMTに対して時間を得る enter image description here

ました。

関連する問題