Heim >Backend-Entwicklung >PHP-Tutorial >PHP: Zeitzonen verstehen

PHP: Zeitzonen verstehen

王林
王林Original
2024-08-06 03:40:41693Durchsuche

PHP: Understanding Time Zones

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.

Warum sich mit Zeitzonen beschäftigen?

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:

  • Produktverfügbarkeit
  • Rabatte
  • Versand

Jeder Fehler wird letztendlich dem Unternehmen schaden.

Erste Schritte mit Zeitzonen in PHP

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.

Zeitunterschied zwischen Zeitzonen

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.

Verwenden Sie UTC, „immer“

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 vs. UTC

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.

Was ist „Zulu“?

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

Die Zeit kann sich ändern

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.

Kohlenstoff und Zeitzonen

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.

So verwalten Sie die Sommerzeit

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);

Known bugs in PHP

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.

Useful links

  • What time is it?
  • PHP doc - Time zones
  • PHP doc - getTransitions()
  • Daylight Time
  • PHP engineer - time zones
  • Military time

Das obige ist der detaillierte Inhalt vonPHP: Zeitzonen verstehen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn