Start · Sprachen · PHP · Referenz · intltz_get_id_for_windows_id

intltz_get_id_for_windows_id

Funktion

Übersetzt eine Windows-Zeitzonenkennung in eine entsprechende IANA/Olson-Systemzeitzone.

seit PHP 7.1.0 Kategorie: string

Signatur

intltz_get_id_for_windows_id(string $timezoneId, string|null $region = null): string|false

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

Typ
string|false
Beschreibung
Gibt den entsprechenden IANA-Zeitzonenbezeichner als 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);
string(13) "Europe/Berlin" string(16) "America/New_York"

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);
Standard: Europe/Paris Spanien: Europe/Madrid bool(false)

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;
}
Aktuelle Zeit in Asia/Tokyo: 2024-01-15 10:30:00 JST

// 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.