2011-01-04 9 views
1

Wie bekomme ich die aktuelle Windows-Zeit in einem PHP-Skript?Windows-Zeit in PHP bekommen

Verwenden time() scheint nicht zu funktionieren, da es Zeitzone bewusst ist und ignoriert, ob DST tatsächlich aktiviert ist oder nicht auf dem Server. Z. B. wenn die Zeitzone auf "America/Los_Angeles" gesetzt ist, aber DST deaktiviert ist (Windows-Maschine), wenn das heutige Datum 1. September ist, dann kann die Windows-Zeit 13 Uhr sein, aber die PHP time() gibt 2 PM zurück.

Wie kann ich die Windows-Zeit des Servers erhalten? (mit PHP 5.2.14).

Wiedergabe des Problems

  • Set Zeitzone "Amerika/Los_Angeles" und deaktivieren Sie die "Sommerzeit" aktivieren. Stellen Sie das Datum auf 1. September 2010 um 16:00:00 Uhr ein.
  • Erstellen Sie ein einfaches PHP-Skript mit den folgenden, dann laufen

echo date_default_timezone_get(), date("H:i:s", time());

Der Ausgang Amerika/Los_Angeles 17.00.00. Beachten Sie die Differenz von 1 Stunde aufgrund der Sommerzeit.

+2

'time()' gibt eine Zeitzone-neutral UNIX-Zeitstempel. Wie stellen Sie fest, dass es um eine Stunde aus ist? – deceze

+0

Was sagt 'date_default_timezone_get()'? Kannst du etwas Code zeigen? Wie stellen Sie fest, dass 'time()' ausgeschaltet ist? –

+0

'date (" r ")' sollte Ihnen bereits die lokale Zeit entsprechend den Systemeinstellungen und der Zeitzone geben, während 'gmdate (" r ")' die GMT-Version ist. Andernfalls könnte es sich um ein ['php.ini' Problem] (http://de3.php.net/manual/en/datetime.configuration.php) handeln. – mario

Antwort

2

Ich denke, PHP findet nicht die Windows-DST berücksichtigt Einstellung. Zeitzonen werden nach dem definierten Standard interpretiert. Auch nach letztem Mal kam auf dem Punkt: Daylight savings time not correct even after setting timezone

Aber http://php.net/manual/en/function.date-default-timezone-set.php
Es gibt einige Beispiele-Code sieht WShell mit dem Win-Registry für die aktuellen Werte abfragen, einschließlich dem DST-Flag. Dann mit timezone_abbreviations_list() können Sie einen Alias ​​mit dem richtigen Zeitzone Namen und DST-Flag finden, setzen Sie dies.

Auch hatte @Pekka eine weitere manuelle Abhilfe hier: php date() one hour ahead of server time (DST problem) (er nicht einfach sagen, nicht jeder.)

2

date("Z") gibt Ihnen den vorzeichenbehafteten lokalen Offset von gmt in Sekunden. Sie können das dann zur Ausgabe von Datum hinzufügen. finden Sie in die Manpage der date function

, wenn Sie Vertrauen nicht, dass Sie Einstellungen können auch das Datum Befehl ausführen shell_exec verwenden und analysieren die Ausgabe

+0

Datum ("Z") gibt die Zeitzone Offset, was ist nicht was ich brauche, da es nicht berücksichtigt, ob DST aktiviert ist oder nicht auf dem Server. – JRL

+0

Wie beim Analysieren der Ausgabe von Shell_exec liegt das Problem darin, dass das Gebietsschema variieren kann und der Matcher dafür komplex sein könnte. – JRL