Aktueller Standort: Startseite> Neueste Artikel> Wie bekomme ich UTC -Offsets für All TimeZones und zeigt sie über TimeZone_identifiers_List an? Detaillierter Betriebsleitfaden

Wie bekomme ich UTC -Offsets für All TimeZones und zeigt sie über TimeZone_identifiers_List an? Detaillierter Betriebsleitfaden

gitbox 2025-06-30

In PHP können wir alle gültigen Zeitzone-Kennungen über die integrierte Funktion timezone_identifiers_list erhalten. Diese Funktion gibt ein Array zurück, das alle Zeitzonenkennungen enthält. Als nächstes können wir die DateTimezone -Klasse verwenden, um den UTC -Offset für jede Zeitzone zu berechnen. In diesem Artikel wird detailliert erläutert, wie UTC -Offsets für alle Zeitzonen in diesen Funktionen erhalten und angezeigt werden.

Schritt 1: Holen Sie sich alle Zeitzonenkennungen

Zunächst müssen wir alle gültigen Zeitzonenkennungen erhalten. Wir können die Funktion TimeZone_identifiers_List () verwenden, um sie zu implementieren. Diese Funktion akzeptiert keine Parameter, sondern gibt ein Array zurück, das alle Zeitzonenkennungen enthält. Hier ist der Code, um die Zeitzonenkennung zu erhalten:

 <span><span><span class="hljs-variable">$timezones</span></span><span> = </span><span><span class="hljs-title function_ invoke__">timezone_identifiers_list</span></span><span>();
</span></span>

Schritt 2: Iterieren Sie über die Zeitzonenkennung

Nachdem wir die Zeitzonenliste erhalten haben, müssen wir diese Zeitzonenkennungen durchfliegen und den UTC -Offset für jede Zeitzone berechnen. Dazu können wir die DateTimezone -Klasse verwenden, um ein Zeitzonenobjekt zu erstellen und die Methode von GetOffset () zu verwenden, um den Offset zu erhalten. Die Methode von GetOffset () gibt einen Offset in Sekunden zurück.

 <span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$timezones</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$timezone</span></span><span>) {
    </span><span><span class="hljs-comment">// Erstellen Sie ein Zeitzonenobjekt</span></span><span>
    </span><span><span class="hljs-variable">$tz</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title class_">DateTimeZone</span></span><span>(</span><span><span class="hljs-variable">$timezone</span></span><span>);
    
    </span><span><span class="hljs-comment">// Holen Sie sich die aktuelle Zeit UTC Offset(Einheit:Zweite)</span></span><span>
    </span><span><span class="hljs-variable">$offset</span></span><span> = </span><span><span class="hljs-variable">$tz</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">getOffset</span></span><span>(</span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title class_">DateTime</span></span><span>(</span><span><span class="hljs-string">"now"</span></span><span>, </span><span><span class="hljs-variable">$tz</span></span><span>));

    </span><span><span class="hljs-comment">// 将Offset转换为小时和分钟的格式</span></span><span>
    </span><span><span class="hljs-variable">$offset_hours</span></span><span> = </span><span><span class="hljs-title function_ invoke__">intdiv</span></span><span>(</span><span><span class="hljs-variable">$offset</span></span><span>, </span><span><span class="hljs-number">3600</span></span><span>); </span><span><span class="hljs-comment">// Berechnen Sie die Stunden</span></span><span>
    </span><span><span class="hljs-variable">$offset_minutes</span></span><span> = </span><span><span class="hljs-title function_ invoke__">abs</span></span><span>((</span><span><span class="hljs-variable">$offset</span></span><span> % </span><span><span class="hljs-number">3600</span></span><span>) / </span><span><span class="hljs-number">60</span></span><span>); </span><span><span class="hljs-comment">// Berechnen Sie die Anzahl der Minuten</span></span><span>

    </span><span><span class="hljs-comment">// 输出时区和Offset</span></span><span>
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$timezone</span></span><span> . </span><span><span class="hljs-string">' UTC '</span></span><span> . (</span><span><span class="hljs-variable">$offset_hours</span></span><span> &gt;= </span><span><span class="hljs-number">0</span></span><span> ? </span><span><span class="hljs-string">'+'</span></span><span> : </span><span><span class="hljs-string">'-'</span></span><span>) . </span><span><span class="hljs-title function_ invoke__">abs</span></span><span>(</span><span><span class="hljs-variable">$offset_hours</span></span><span>) . </span><span><span class="hljs-string">':'</span></span><span> . </span><span><span class="hljs-title function_ invoke__">str_pad</span></span><span>(</span><span><span class="hljs-variable">$offset_minutes</span></span><span>, </span><span><span class="hljs-number">2</span></span><span>, </span><span><span class="hljs-string">'0'</span></span><span>, STR_PAD_LEFT) . </span><span><span class="hljs-string">"\n"</span></span><span>;
}
</span></span>

Schritt 3: Format -UTC -Offset

Im obigen Code erhalten wir die Anzahl der Sekunden des UTC -Offsets über GetOffset () . Um Offsets freundlicher anzuzeigen, müssen wir sie in Stunden- und Minutenformate umwandeln. Die Einheit des Versatzes beträgt Sekunden. Durch die Teilen von 3600 können wir die Anzahl der Stunden erhalten. Wenn wir den Rest nehmen, können wir dann die Anzahl der Minuten berechnen. Schließlich geben wir die Zeitzone und den entsprechenden Offset aus.

Vollständiger Codebeispiel

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>

</span><span><span class="hljs-comment">// Holen Sie sich alle Zeitzonenkennungen</span></span><span>
</span><span><span class="hljs-variable">$timezones</span></span><span> = </span><span><span class="hljs-title function_ invoke__">timezone_identifiers_list</span></span><span>();

</span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$timezones</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$timezone</span></span><span>) {
    </span><span><span class="hljs-comment">// Erstellen Sie ein Zeitzonenobjekt</span></span><span>
    </span><span><span class="hljs-variable">$tz</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title class_">DateTimeZone</span></span><span>(</span><span><span class="hljs-variable">$timezone</span></span><span>);
    
    </span><span><span class="hljs-comment">// Holen Sie sich die aktuelle Zeit UTC Offset(Einheit:Zweite)</span></span><span>
    </span><span><span class="hljs-variable">$offset</span></span><span> = </span><span><span class="hljs-variable">$tz</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">getOffset</span></span><span>(</span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title class_">DateTime</span></span><span>(</span><span><span class="hljs-string">"now"</span></span><span>, </span><span><span class="hljs-variable">$tz</span></span><span>));

    </span><span><span class="hljs-comment">// 将Offset转换为小时和分钟的格式</span></span><span>
    </span><span><span class="hljs-variable">$offset_hours</span></span><span> = </span><span><span class="hljs-title function_ invoke__">intdiv</span></span><span>(</span><span><span class="hljs-variable">$offset</span></span><span>, </span><span><span class="hljs-number">3600</span></span><span>); </span><span><span class="hljs-comment">// Berechnen Sie die Stunden</span></span><span>
    </span><span><span class="hljs-variable">$offset_minutes</span></span><span> = </span><span><span class="hljs-title function_ invoke__">abs</span></span><span>((</span><span><span class="hljs-variable">$offset</span></span><span> % </span><span><span class="hljs-number">3600</span></span><span>) / </span><span><span class="hljs-number">60</span></span><span>); </span><span><span class="hljs-comment">// Berechnen Sie die Anzahl der Minuten</span></span><span>

    </span><span><span class="hljs-comment">// 输出时区和Offset</span></span><span>
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$timezone</span></span><span> . </span><span><span class="hljs-string">' UTC '</span></span><span> . (</span><span><span class="hljs-variable">$offset_hours</span></span><span> &gt;= </span><span><span class="hljs-number">0</span></span><span> ? </span><span><span class="hljs-string">'+'</span></span><span> : </span><span><span class="hljs-string">'-'</span></span><span>) . </span><span><span class="hljs-title function_ invoke__">abs</span></span><span>(</span><span><span class="hljs-variable">$offset_hours</span></span><span>) . </span><span><span class="hljs-string">':'</span></span><span> . </span><span><span class="hljs-title function_ invoke__">str_pad</span></span><span>(</span><span><span class="hljs-variable">$offset_minutes</span></span><span>, </span><span><span class="hljs-number">2</span></span><span>, </span><span><span class="hljs-string">'0'</span></span><span>, STR_PAD_LEFT) . </span><span><span class="hljs-string">"\n"</span></span><span>;
}
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

Ausgangsbeispiel

Wenn Sie den obigen Code ausführen, sehen Sie die folgende Ausgabe:

 <span><span>Africa/Abidjan UTC +0:00
Africa/Accra UTC +0:00
Africa/Addis_Ababa UTC +3:00
Africa/Algiers UTC +1:00
Africa/Asmara UTC +3:00
</span><span><span class="hljs-meta prompt_">...</span></span><span>
Asia/Kolkata UTC +5:30
Asia/Kuala_Lumpur UTC +8:00
Asia/Kuwait UTC +3:00
</span><span><span class="hljs-meta prompt_">...</span></span><span>
</span></span>

Jede Zeile zeigt eine Zeitzone und ihren entsprechenden UTC -Offset, sodass Sie die Zeitunterschiede zwischen jeder Zeitzone anzeigen können.

Schritt 4: Optimierung und Vorsichtsmaßnahmen

  1. Betrachten Sie die Zeitsparenzeit für Tageslicht : Wenn Sie einen Offset für eine Zeitzone an einem bestimmten Datum erhalten möchten, können Sie eine bestimmte Zeit für das DateTime -Objekt angeben, anstatt neue DateTime ("Now", $ TZ) zu verwenden. Auf diese Weise können Sie die Auswirkungen der Tageslichtsparzeit (DST) berücksichtigen.

  2. Datum und Uhrzeitverarbeitung : Die Methode von GetOffset () gibt einen Offset in Bezug auf die UTC -Zeit zurück. Im Allgemeinen ist es sehr nützlich für die Beurteilungszeitunterschiede, aber wenn Datums- und Uhrzeitkonvertierungen beteiligt sind, müssen Sie möglicherweise mehr mit dem DateTime -Objekt durchführen.

  3. Ausgabeformat : Das Ausgabeformat dieses Beispiels ist das Format "UTC +/-

Zusammenfassen

Durch die Funktion TimeZone_identifiers_List von PHP und DateTimezone können wir die UTC -Offsets für alle Zeitzonen problemlos erhalten. Diese Funktion ist bei Anwendungen in Zeitzonen und Projekten sehr praktisch, die eine genaue Berechnung der Zeitunterschiede erfordern. Hoffentlich hilft Ihnen der detaillierte Betriebshandbuch in diesem Artikel besser zu verstehen, wie Sie die UTC -Offsets für die Zeitzone erhalten und anzeigen können.