Unix Timestamp - Datum immer falsch

obilaner

Lt. Junior Grade
Registriert
Apr. 2011
Beiträge
389
Hallo.

Wenn ich einen Unix Timestamp aus meinem Geburtstag errechne ist das Datum wenn ich es wieder zurückrechne einen Tag falsch. Warum ist das so? Hat es was mit Zeitzonen zu tun? Wieso ist das so und was muss ich konfigurieren für eine deutsche Webseite in meiner Website, SQL und PHP? und wo?
 
Unix Timestamps sind immer UTC. Heißt hier in Deutschland hast du ne Zeitverschiebung von +1 (MEZ) oder +2 (MESZ) Stunden.

05.10.1980 00:00:00 (MEZ)
= 339548400 (Timestamp)
= 04.10.1980 23:00:00 (UTC)

In der php.ini musst du entsprechend date.timezone konfigurieren. Die Zeitzone wird dann automatisch auf alle date-Funktionen angewendet und das Offset drauf gerechnet.
 
  • Gefällt mir
Reaktionen: lokked und nkler
Je nach Fall macht es mehr Sinn alles in UTC zu halten, auch die Kommunikation zwischen Front- und Backend und nur auf dem Client in die entsprechende Zeitzone zu konvertieren.
Hätte den Vorteil, dass man von überall drauf zugreifen kann und die korrekte Zeit angezeigt bekommt. Für sowas nehme ich z.B. gerne DayJS.
 
Hab glaube ich die Antwort mittlerweile gefunden. Es ist ganz einfach das ich 00.00 als generische Uhrzeit für Geburtsdaten verwendet habe. Dazu muss man eben beachten ob grade sommer oder winterzeit ist. Die Lösung ist also lieber 06.00 Uhr zu nehmen statt 00.00 und dann jeweils ob es sommerzeit ist oder winterzeit eine stunde abzuziehen oder hinzuzufügen. Vielen dank.
 
Du verschiebt das Problem wieder nur. UTC-7 hat das selbe Problem. Oder arbeite mit DateTime.
 
Lösung ist doch, dass man beide Zeiten auf die selbe Timezone umrechnet. Erst dann rechnen und ggf wieder zurück konvertieren (falls man sich für den umständlicheren Weg entschieden hat)r
Andererseits könnte man auch ganz ohne Zeit arbeiten
 
  • Gefällt mir
Reaktionen: lokked
Wenn du die Erstellung des Timestamps sowie die Umwandlung kontrollierst und alles in der gleichen Zeitzone passiert, wird für alles die Standardeinstellung in der php.ini angenommen. Dann wirds richtig einfach:
PHP:
$timestamp = strtotime("11.11.1902 11:11");
$date = new DateTime('@' . $timestamp);
echo $date->format('d-m-Y H:i');

PHP:
date_default_timezone_set("Europe/Berlin"); // zu faul die php.ini zu editieren
$timestamp = strtotime("11.11.1902 11:11");
// @ vorangestellt: Unix timestamp wird angenommen, also wird die Zeitzone auf UTC gesetzt
$date = new DateTime('@' . $timestamp);
// jetzt für die Ausgabe von UTC auf meine lokale Zeitzone switchen
$date->setTimezone(new DateTimeZone('Europe/Berlin'));
echo $date->format('d-m-Y H:i');
würde immer richtig berechnet - vorausgesetzt der Ersteller des Timestamps hat seine Zeitzone ebenfalls richtig konfiguriert (in diesem Fall sind wir das).
 
Zurück
Oben