Signatur
Beschreibung
timezone_name_from_abbr() sucht in der Zeitzonendatenbank nach einem passenden Zeitzonen-Bezeichner (im Format Kontinent/Stadt) und gibt diesen zurück. Als Suchkriterien dienen die Abkürzung (z. B. CET), die Abweichung von UTC in Sekunden sowie ein Flag für Sommerzeit (DST).
Die Funktion ist besonders nützlich, wenn externe Systeme oder APIs Zeitzonenabkürzungen liefern und diese in vollständige, von PHP verarbeitbare Zeitzonen-Bezeichner umgewandelt werden müssen. Viele Abkürzungen sind jedoch mehrdeutig (z. B. CST für Central Standard Time in Nordamerika und China Standard Time), weshalb die Kombination aus Abkürzung, UTC-Offset und DST-Flag die Eindeutigkeit erhöht.
Wird für utcOffset oder isDST der Wert -1 übergeben, ignoriert PHP diesen Parameter bei der Suche. Bei völlig unbekannter Abkürzung gibt die Funktion false zurück.
Intern greift diese Funktion auf dieselbe Datenbank wie die DateTimeZone-Klasse und timezone_open() zurück. Der zurückgegebene Bezeichner kann direkt an new DateTimeZone() übergeben werden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $abbr Pflicht | string | Die Zeitzonenabkürzung, z. B. CET, UTC oder EST. Groß-/Kleinschreibung wird nicht beachtet. |
|
| $utcOffset | int | -1 | Abweichung von UTC in Sekunden (z. B. 3600 für +01:00). Der Wert -1 deaktiviert diesen Filter. |
| $isDST | int | -1 | Gibt an, ob Sommerzeit gilt: 1 = Sommerzeit aktiv, 0 = keine Sommerzeit, -1 = wird ignoriert. |
Rückgabewert
string zurück (z. B. Europe/Berlin), oder false, wenn keine passende Zeitzone gefunden wurde.Beispiele
Einfache Abfrage per Abkürzung
<?php
$timezone = timezone_name_from_abbr('CET');
echo $timezone; // Europe/Paris (oder ähnlich, da mehrdeutig)
$timezone = timezone_name_from_abbr('UTC');
echo $timezone; // UTC
Eindeutige Suche mit UTC-Offset und DST-Flag
<?php
// CET mit UTC+1 und ohne Sommerzeit => Europe/Berlin
$timezone = timezone_name_from_abbr('CET', 3600, 0);
if ($timezone !== false) {
$tz = new DateTimeZone($timezone);
$dt = new DateTime('now', $tz);
echo $timezone . ': ' . $dt->format('Y-m-d H:i:s P');
} else {
echo 'Zeitzone nicht gefunden.';
}
Fehlerbehandlung bei unbekannter Abkürzung
<?php
$result = timezone_name_from_abbr('XYZ', 0, 0);
if ($result === false) {
echo 'Unbekannte Zeitzonenabkürzung.';
} else {
echo $result;
}
// Wichtig · Fallstricke
Achtung bei Mehrdeutigkeit: Viele Zeitzonenabkürzungen sind nicht weltweit eindeutig. CST steht z. B. sowohl für Central Standard Time (UTC-6) als auch für China Standard Time (UTC+8). Ohne Angabe von utcOffset und isDST kann das Ergebnis unerwartet sein.
Die Funktion ist ein prozeduraler Wrapper und verhält sich identisch zu DateTimeZone::listAbbreviations() kombiniert mit einer manuellen Suche. Für neue Projekte empfiehlt sich die direkte Verwendung vollständiger Zeitzonen-Bezeichner statt Abkürzungen, um Mehrdeutigkeit zu vermeiden.
Der zurückgegebene Bezeichner ist abhängig von der installierten Zeitzonendatenbank (oft über das Paket timezonedb aktualisierbar). Veraltete Datenbanken können zu falschen oder fehlenden Ergebnissen führen.