2012-04-13 12 views
8

Das folgende Skript zur falschen Zeit zurückkehrt, nachdem ich date_default_timezone_set("UTC")PHP date Unzeit Rückkehr

<?PHP 
    $timestamp = time(); 
    echo "<p>Timestamp: $timestamp</p>"; 

    // This returns the correct time 
    echo "<p>". date("Y-m-d H:i:s", $timestamp) ."</p>"; 


    echo "<p>Now I call 'date_default_timezone_set(\"UTC\")' and echo out the same timestamp.</p>"; 
    echo "Set timezone = " . date_default_timezone_set("UTC"); 

    // This returns a time 5 hours in the past 
    echo "<p>". date("Y-m-d H:i:s", $timestamp) ."</p>"; 

?> 

Die Zeitzone auf dem Server nennen, ist BST. Was also passieren sollte ist, dass der zweite Aufruf von 'date' eine Stunde nach dem ersten Aufruf zurückgeben soll. Es gibt tatsächlich eine Zeit zurück 5 Stunden hinter der ersten.

Ich sollte beachten, dass der Server ursprünglich mit der EDT-Zeitzone (UTC -4) eingerichtet wurde. Das wurde in BST (UTC +1) geändert und der Server wurde neu gestartet.

Ich kann nicht herausfinden, ob das ein PHP-Problem oder ein Problem mit dem Server ist.

+0

Was ist date_default_timezone_get() zeigt * vor * Sie die Zeitzone ändern? – BenOfTheNorth

+0

Zeitzone: Europa/London – gargantuan

+0

Und was gibt der terminal Befehl Ihres Servers zurück? –

Antwort

6

Dies ist fast sicher kein Fehler in PHP, aber in Ihrer lokalen Zeitzone Konfiguration.

Höchstwahrscheinlich haben Sie die systemweite Zeitzone nicht geändert, sondern nur die eines interaktiven Displays. Überprüfen Sie, ob /etc/localtime dem entspricht, was Sie erwarten würden. Auf Debian-Systemen können Sie tzselect (mit Superuser-Rechten) ausführen, um die systemweite Zeitzone festzulegen.

Nach dem Einstellen der Zeitzone müssen Sie möglicherweise Ihre Uhr zurücksetzen. Auf vielen Systemen sollte dies automatisch im Laufe der Zeit geschehen, aber Sie können es manuell ausführen, indem Sie ntpdate -u pool.ntp.org ausführen.

1

Sie sollten das php Handbuch für die korrekte Zeitzone Ihres Landes überprüfen. Stellen Sie es dann in der Funktion date_default_timezone_set() ein. Zur Verdeutlichung ich es hier erklärt http://t2techblog.com/php-a-simple-function-for-getting-the-current-nigeria-local-time/

+0

Vielleicht könnten Sie ein Beispiel geben. – Lance

+0

Beispiel: Eine einfache Funktion, die die richtige Zeit in meinem Land (Nigeria) mit einer Willkommensnachricht zurückgibt.

+0

Es tut mir wirklich leid, dass die Funktion und meine Texte irgendwie zusammen gepackt sind. Ich bin neu hier. Ich finde immer noch heraus, wie die Dinge funktionieren –

0

setzen Sie einfach Ihre Region mit dem Code folgende

date_default_timezone_set("Asia/Bangkok");//set you countary name from below timezone list 
    echo $date = date("Y-m-d H:i:s", time());//now it will show "Asia/Bangkok" or your date time 

Liste der unterstützten Zeitzonen http://www.php.net/manual/en/timezones.php