Guten Tag,
gehe ich Recht in der Annahme, dass die php-Funktion [time()](http://de.php.net
/manual/de/function.time.php), die die seit Beginn der
Unix-Epoche (1. Jänner 1970, 0 Uhr mitteleuropäische Zeit) bis jetzt
vergangenen Sekunden ausgibt, dies auf das eingestellte Datum und die
eingestellte Zeit _jenes_ Rechners bezieht, auf dem geparst wird?
Nein. Der Beginn der Unix-Epoche war am 01. Januar 1970 um 00:00 UTC (auch bekannt als GMT, aber nun bitte keine Diskussion, ob UTC und GMT identisch sind), nicht MEZ/CET. time() liefert die Sekunden seit dieser Zeit zurück, getdate() liefert jedoch ein Array mit verschiedenen Werten zurück - eine Liste dieser findest du im Manual, wie du ja schon sicher bemerkt hast.
PHP konvertiert allerdings die Anzeige, nicht die tatsächlich vergangenen Sekunden seit Beginn der Unix-Epoche, in die lokal von dir eingestellte Zeitzone. Mein Rechner steht in München und ist auf Europe/Berlin eingestellt (ein Alias für UTC +01:00):
$ php -r "var_dump(date_default_timezone_get(), getdate());"
string(13) "Europe/Berlin"
array(11) {
["seconds"]=>
int(4)
["minutes"]=>
int(4)
["hours"]=>
int(18)
["mday"]=>
int(23)
["wday"]=>
int(2)
["mon"]=>
int(12)
["year"]=>
int(2008)
["yday"]=>
int(357)
["weekday"]=>
string(7) "Tuesday"
["month"]=>
string(8) "December"
[0]=>
int(1230051844)
}
Setze ich die Zeitzone aber explizit auf UTC, ändert sich auch die Anzeige, jedoch nicht die Anzahl der vergangenen Sekunden seit Beginn der Unix-Epoche[0]:
$ php -r "var_dump(date_default_timezone_set('UTC'), getdate());"
bool(true)
array(11) {
["seconds"]=>
int(20)
["minutes"]=>
int(4)
["hours"]=>
int(17)
["mday"]=>
int(23)
["wday"]=>
int(2)
["mon"]=>
int(12)
["year"]=>
int(2008)
["yday"]=>
int(357)
["weekday"]=>
string(7) "Tuesday"
["month"]=>
string(8) "December"
[0]=>
int(1230051860)
}
time() liefert jedoch nur die Anzahl der Sekunden seit Beginn der Unix-Epoche (einen sog. Timestamp), egal, welche Zeitzone eingestellt ist:
$ php -r "var_dump(date_default_timezone_get(),time(),date_default_timezone_set('UTC'), time());"
string(13) "Europe/Berlin"
int(1230052434)
bool(true)
int(1230052434)
Und ich glaube, ich verstehe nicht ganz den wirklichen Unterschied zwischen
time() und
getdate().
Verwenden diese 2 Funktionen verschiedene Quellen, auf grund derer sie die
Ausgabe berechnen?
Nein. PHP beachtet nur bei der Datumsausgabe eine gesetzte Zeitzone. time() betrifft dies aber funktionsbedingt nicht.
Wenn ich irgend welche Datums-/Zeit-Rechnungen, bei der das aktuelle
Datum/die aktuelle Zeit eine Rolle spielt, vorliegen habe, soll dann
time() oder
getdate() der
Ausgangspunkt des Codes sein?
Die Zeitzone ist relevant, die Datumsinformationen basieren beide auf der Anzahl der Sekunden, die seit Beginn der Unix-Epoche vergangen sind.
Lies am Besten mal ausführlich das Kapitel zu den Datums- und Zeitfunktionen im Manual durch und teste, teste, teste.
[0] Die Abweichung ergibt sich daraus, dass ich die Befehle hinteinander ausführte. Sie ändert sich aber nicht so signifikant, als dass das Beispiel ad absurdum geführt würde.
Gruß
Christoph Jeschke
--
Zend Certified Engineer
Certified Urchin Admin