Heim > Artikel > Backend-Entwicklung > PHP: Zeitzonen verstehen
Das Arbeiten mit Zeitzonen kann beim Programmieren schwierig sein.
Da PHP für das Web gedacht ist, wird es von der Sprache unterstützt. Mal sehen, warum es Sie interessieren sollte.
Wenn Ihnen Zeitzonen egal sind, bekommen Sie früher oder später Fehler.
Zeitbezogene Funktionen können fehlschlagen (z. B. geplante Ereignisse). Es wird noch schlimmer, wenn Sie sich mit kniffligen Konzepten wie der Sommerzeit auseinandersetzen müssen.
Diese Konzepte sind für den E-Commerce unerlässlich:
Jeder Fehler wird letztendlich dem Unternehmen schaden.
Die einfachste, aber dennoch leistungsstärkste Implementierung würde dieser ähneln:
$timeZone = new DateTimeZone('Europe/Berlin'); $date = new DateTime('now', $timeZone); echo $date->format('Y-m-d H:i:s');
Die integrierte DateTime-Klasse verwendet ein DateTimeZone-Objekt als zweites Argument, das sich auf weitere Operationen mit dem $date-Objekt auswirkt.
Um die richtige Zeitzone zu finden, können Sie DateTimeZone::listIdentifiers() oder diesen Link verwenden.
DateTime bietet verschiedene Helfer zum Ausführen allgemeiner Vorgänge an Datumsangaben. Der Zeitunterschied ist ein sehr grundlegender Faktor, aber was passiert mit unterschiedlichen Zeitzonen?
$dateTimeNY = new DateTime('2024-08-02 01:01:01', new DateTimeZone('America/New_York')); $dateTimeBerlin = new DateTime('2024-08-02 07:01:01', new DateTimeZone('Europe/Berlin')); $interval = $dateTimeNY->diff($dateTimeBerlin); print_r($interval);// 0 everywhere
Ohne die Zeitzonen „Amerika/New_York“ und „Europa/Berlin“ würden Sie einen weiteren Unterschied (6 Stunden) erhalten, da PHP standardmäßig davon ausgehen würde, dass $dateTimeNY und $dateTimeBerlin aus derselben Zeitzone stammen.
Es mag hier offensichtlich erscheinen, aber wenn Ihre App diese Informationen nicht korrekt erfasst, kann das schlimme Folgen haben.
Während es möglich ist, in PHP einen bestimmten Wert für die Standardzeitzone festzulegen, ist es normalerweise eine bessere Idee, UTC zu verwenden, insbesondere wenn Sie verschiedene Zeitzonen verwalten müssen.
UTC bezieht sich auf „die Unix-Epoche“ und ist ein universelles Format.
99,9 % der Zeit wird empfohlen, Ihre Daten in UTC zu speichern.
Auf diese Weise bleiben Sie konsistent.
Beachten Sie, dass Sie zum Bearbeiten dieser Daten die in PHP integrierten Hilfsprogramme und Konverter verwenden müssen, alle gespeicherten Daten sich jedoch nur auf denselben Ursprungspunkt beziehen (00:00:00 UTC am 1. Januar 1970).
Es vereinfacht allgemeine Vorgänge wie Vergleichen und Sortieren. Andernfalls erhalten Sie möglicherweise Werte, die gleich aussehen, sich aber implizit nicht auf derselben Grundlinie befinden.
GMT bedeutet Greenwich Mean Time und war früher der Eckpfeiler der Zeitzonen.
Technisch gesehen UTC und GMT geben die gleiche Zeit an, aber UTC ist genauer (Atomuhr) und konsistenter (keine Sommerzeit).
Im Gegensatz zu UTC ist GMT eine Zeitzone. Möglicherweise haben Sie es in Aktion gesehen, als jede Zeitzone Stunden zu GMT+0 hinzufügt oder davon abzieht.
Dies sind beide Zeitstandards für recht ähnliche Zwecke, aber UTC ist anspruchsvoller.
Verschiedenen Quellen zufolge wird es mit „UTC“ abgekürzt, da es sonst „CUT“ auf Englisch („Coordinated Universal Time“) und „TUC“ auf Französisch („Temps Universel Coordonné“) heißen würde.
Zulu ist ein Zeitstandard, der hauptsächlich beim Militär und im Zusammenhang mit Fluggesellschaften verwendet wird.
„Zulu“ bedeutet „Nullmeridian des Längengrads“, was ziemlich dasselbe ist wie GMT, aber das Militär und die Flieger verwenden phonetisches Alphabet anstelle von Buchstaben.
Es ist kein kritisches Konzept (im Gegensatz zu UTC), aber es ist gut zu wissen, und wenn Sie dieses Format tatsächlich benötigen, unterstützt PHP es:
Y-m-d\TH:i:sp
Das Konzept der „Zeitzonen“ betrifft nur Menschen, nicht Maschinen und Programme.
Regierungen können die „Zeiteinstellungen“ ändern. Beispielsweise kann der UTC-Offset oder die Einhaltung der DST (Daylight Time) variieren.
Viele andere Ereignisse können die globale Zeit beeinflussen. Ein weiterer guter Grund, das universelle UTC-Format und standardisierte Konverter zu verwenden, um in der Programmierung mit Zeitzonen zu arbeiten.
Carbon ist eine Reihe von Helfern, die auf dem nativen DateTime-Objekt aufbauen.
Aus diesem Grund unterstützt Carbon folgende Zeitzonen:
$tomorrow = Carbon::now()->tomorrow()->tz('Europe/Berlin');
Wenn Sie ein Framework wie Laravel verwenden, ist das Carbon-Paket bereits installiert.
Sommerzeit oder Sommerzeit (DST) ist ein wichtiges Konzept für viele Apps.
Kurz gesagt: Menschen stellen die Uhr um, um das Tageslicht besser zu nutzen.
Das passiert, weil das Tageslicht im Sommer normalerweise länger ist (nicht überall). Deshalb stellt man im Herbst die Uhren vor und zurück, wenn das Tageslicht wieder kürzer wird.
Mit anderen Worten, die Sommerzeit hängt mit den Sonnenauf- und -untergangszeiten zusammen, die auf der ganzen Welt sehr unterschiedlich sein können.
Sie können diese Variationen abrufen, indem Sie getTransitions():
verwenden
$timezone = new DateTimeZone('Europe/Berlin'); $transitions = $timezone->getTransitions(); print_r($transitions);
If you use the latest version of PHP, you will not get this specific bug, but your case can be a known issue.
Read reported bugs and issues, as it might prevent some headaches.
Das obige ist der detaillierte Inhalt vonPHP: Zeitzonen verstehen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!