Start · Sprachen · PHP · Referenz · timezone_name_from_abbr

timezone_name_from_abbr

Funktion

Liefert den vollständigen Zeitzonennamen (z. B. <code>Europe/Berlin</code>) anhand einer Abkürzung, UTC-Abweichung und DST-Flag.

seit PHP 5.1.3 Kategorie: date

Signatur

timezone_name_from_abbr(string $abbr, int $utcOffset = -1, int $isDST = -1): string|false

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

Typ
string|false
Beschreibung
Gibt den vollständigen Zeitzonen-Bezeichner als 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
Europe/Paris 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.';
}
Europe/Berlin: 2024-06-15 14:30:00 +02:00

Fehlerbehandlung bei unbekannter Abkürzung

<?php
$result = timezone_name_from_abbr('XYZ', 0, 0);
if ($result === false) {
    echo 'Unbekannte Zeitzonenabkürzung.';
} else {
    echo $result;
}
Unbekannte Zeitzonenabkürzung.

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