Signatur
Beschreibung
intltz_get_id_for_windows_id() konvertiert einen Windows-spezifischen Zeitzonen-Bezeichner (z. B. "Romance Standard Time") in den entsprechenden IANA-Zeitzonennamen (z. B. "Europe/Paris"), wie er unter Linux/macOS und in den meisten modernen Bibliotheken verwendet wird.
Die Funktion ist das Gegenstück zu intltz_get_windows_id(). Sie ist nützlich, wenn Daten aus Windows-Umgebungen oder Windows-APIs (etwa Exchange-Servern, Microsoft Outlook oder .NET-Anwendungen) verarbeitet werden müssen, die Zeitzonen im Windows-Format liefern, und diese in ein für PHP oder ICU verarbeitbares Format umgewandelt werden sollen.
Über den optionalen Parameter region kann die Suche auf ein bestimmtes ISO-3166-Land oder eine Region eingeschränkt werden, um bei mehrdeutigen Windows-Bezeichnern die passendste Zeitzone zu ermitteln. Wird null übergeben oder der Parameter weggelassen, wird die Standard-Zuordnung verwendet.
Die Funktion ist ein prozedurales Pendant zur Methode IntlTimeZone::getIDForWindowsID() und steht zur Verfügung, wenn PHP mit der ICU-Bibliothek kompiliert wurde.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $timezoneId Pflicht | string | Der Windows-Zeitzonenbezeichner, der übersetzt werden soll, z. B. "Central Standard Time" oder "W. Europe Standard Time". |
|
| $region | string|null | null | Ein optionaler ISO-3166-Ländercode (z. B. "DE", "US"), der die Suche auf eine bestimmte Region einschränkt. Wird null übergeben, gilt die globale Standard-Zuordnung. |
Rückgabewert
string zurück (z. B. "Europe/Berlin"). Ist keine Zuordnung für den angegebenen Windows-Bezeichner bekannt, wird false zurückgegeben.Beispiele
Einfache Konvertierung eines Windows-Zeitzonennamens
<?php
// Windows-Zeitzone in IANA-Zeitzone umwandeln
$ianaId = intltz_get_id_for_windows_id('W. Europe Standard Time');
var_dump($ianaId);
$ianaId2 = intltz_get_id_for_windows_id('Eastern Standard Time');
var_dump($ianaId2);
Konvertierung mit regionaler Einschränkung
<?php
// Zeitzone für 'Romance Standard Time' ohne Region
$default = intltz_get_id_for_windows_id('Romance Standard Time');
echo 'Standard: ' . $default . PHP_EOL;
// Zeitzone für 'Romance Standard Time' für Spanien (ES)
$forSpain = intltz_get_id_for_windows_id('Romance Standard Time', 'ES');
echo 'Spanien: ' . $forSpain . PHP_EOL;
// Ungültige Windows-Zeitzone — gibt false zurück
$invalid = intltz_get_id_for_windows_id('Gibberish Time Zone');
var_dump($invalid);
Verwendung mit DateTimeZone nach Konvertierung
<?php
// Windows-Zeitzonenkennung aus externer Quelle (z. B. Exchange-Server)
$windowsId = 'Tokyo Standard Time';
$ianaId = intltz_get_id_for_windows_id($windowsId);
if ($ianaId !== false) {
$tz = new DateTimeZone($ianaId);
$dt = new DateTimeImmutable('now', $tz);
echo 'Aktuelle Zeit in ' . $ianaId . ': ' . $dt->format('Y-m-d H:i:s T') . PHP_EOL;
} else {
echo 'Unbekannte Windows-Zeitzone: ' . $windowsId . PHP_EOL;
}
// Wichtig · Fallstricke
Verfügbarkeit: Die Funktion benötigt PHP ≥ 7.1 mit aktivierter intl-Erweiterung sowie eine ausreichend aktuelle ICU-Bibliothek (mindestens ICU 54). Ist die Erweiterung nicht geladen, wirft PHP einen fatalen Fehler.
Einschränkungen: Nicht jeder Windows-Bezeichner hat eine eindeutige IANA-Entsprechung. Ohne Angabe einer Region wird stets die erste (Standard-)Zuordnung aus der ICU-Datenbank zurückgegeben, die nicht zwingend die geografisch sinnvollste ist. Im Zweifelsfall sollte daher ein Ländercode übergeben werden.
Alternative (OOP): Anstelle der prozeduralen Funktion kann auch IntlTimeZone::getIDForWindowsID() verwendet werden, was in objektorientiertem Code übersichtlicher ist.