Ich arbeite an einigen zeitbezogenen Funktionen und ich entscheide mich dafür, UTC-Zeiten immer zu verwenden und Zeitstempel als Ganzzahlen für Konsistenz zu speichern.PHP mktime und timezone
Allerdings habe ich festgestellt, dass, wenn ich mktime
verwende, es scheint, dass die aktuell eingestellte Zeitzone einen Einfluss auf den Rückgabewert von mktime
hat. Aus der Dokumentation verstehe ich, dass mktime
soll die Anzahl der Sekunden seit Epoche zurückzukehren:
Gibt den Unix-Zeitstempel an die gegebenen Argumente entsprechen. Dieser Zeitstempel ist eine lange ganze Zahl, die die Anzahl der Sekunden zwischen der Unix-Epoche (1. Januar 1970 00:00:00 GMT) und der angegebenen Zeit enthält.
http://php.net/manual/en/function.mktime.php
Allerdings scheint es, dass mktime
die Zeitzone enthält, die zur Zeit eingestellt ist. Wenn mit dem folgenden Code:
date_default_timezone_set('UTC');
$time = mktime(0, 0, 0, 1, 1, 2016);
echo "{$time}\n";
date_default_timezone_set('Australia/Sydney');
$time = mktime(0, 0, 0, 1, 1, 2016);
echo "{$time}\n";
würde ich erwarten, dass die zwei Mal gleich sein vales aber anscheinend sind sie nicht:
1451606400 - 1451566800 = 39600/(60*60) = 11
:
1451606400
1451566800
Welche exacly eine 11 Stunden Unterschied zu sein scheint
Was verstehe ich nicht richtig über mktime
und/oder warum wird die Zeitzone bei der Verwendung von mktime
berücksichtigt?
Autsch. Das ist ziemlich schlimm. Sie mussten nur UTC für alle Zeitfunktionen verwenden und beim "Anzeigen" nur eine Zeitzone einbauen. Ich schätze, dass es so ist, weil PHP "Geschichte" ist ... Danke für deine Antwort! – Luke