2012-04-07 11 views
4

Ich arbeite an einer Ereignisse Website. Ich bekomme UTC-Zeiten von der MySQL-Datenbank auf meinem localhost und echo sie auf die Seite mit PHP, und dann übersetze sie in die Zeitzone des Benutzers mit Javascript. Aus irgendeinem Grund gibt Javascript mir eine Zeit, die zwei Stunden hinter der Zeit liegt, die ich von MySQL bekam. Sowohl ich selbst als auch mein Server befinden sich in der Mountain Standard Timezone, daher sollte Javascript das Datum um sechs Stunden zurückschieben, stattdessen wird das Datum um acht Stunden zurückgesetzt. Sogar die Sommerzeit macht nur eine Differenz von einer Stunde aus, nicht zwei.Javascript Datum Objekt nicht richtig für Zeitzone Offset

Hier ist die Javascript um den PHP-Zeitstempel auf ein Date-Objekt für die Übersetzung und es in yyyy-mm-dd HH ausgeben: ii: ss-Format (verwendet 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()) 
    ); 
}); 

Hier ist die PHP für den Dokumentenkörper :

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

Es Ausgänge:

  • MySQL Datetime-Objekt: 2012-04-07 23.00.00
  • PHP Unix Zeitstempel: 1333832400
  • PHP Datum string: 2012-04-07 23.00.00
  • PHP Datum minus 6 Stunden (die unsere Zeitzone versetzt ist): 2012-04-07 17.00.00
  • Javascript Datum: 2012-04-07 15:00:00

Keine der Dokumentation die ich gelesen habe liefert Antworten. Warum liegt das Javascript-Datum zwei Stunden hinter dem PHP-Datum in MST?

+0

ist Ihre Serverzeit und die Client-Maschine Zeit gleich? wenn ja ist die Zeitzone auch gleich? – nandu

+0

Versuchen Sie es hier: http://jsfiddle.net/wQMTu/ - Was sehen Sie? – Alexander

+0

Keine Antwort, aber das könnte helfen: Ich empfehle Ihnen, Zeitwerte in UTC zu speichern und zu übertragen und sie nur dann in lokale Zeit umzurechnen, wenn und wann sie einem Benutzer angezeigt werden. Wenn Sie das tun, ist es egal, dass Ihr Server MST ist und Ihr Browser (irgendetwas anderes) ist. Es kann helfen, eine große Kategorie von Bugs zu eliminieren. Es kann das erneute Hosting einfacher machen. und so weiter. – Cheeso

Antwort

0

Der Grund, warum dies geschieht, ist, weil strtotime() die date.timezone Einstellung standardmäßig verwendet, wenn ein bestimmtes Datum/Uhrzeit analysiert wird, so wird das Ergebnis entsprechend kompensiert.

Um dies zu beheben, können Sie entweder die date.timezone-Etc/UTC oder „Anker“ der Zeitstempel aus Ihrer Datenbank wie so gesetzt:

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

ich aufmerksam macht nur das Datum in js diesen Code verwenden.

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

, was ich bekam, war enter image description here

so u Zeit in Bezug auf gmt .in PHP und MySQL-Server erhalten müssen Zeit konfiguriert haben zone.so u nicht zu kümmern.