Start · Sprachen · PHP · Referenz · timezone_transitions_get

timezone_transitions_get

Funktion

Liefert alle Übergänge (Transitions) einer <code>DateTimeZone</code>-Instanz, optional gefiltert nach einem Zeitraum.

seit PHP 5.2.0 Kategorie: date

Signatur

timezone_transitions_get(DateTimeZone $object, int $timestampBegin = PHP_INT_MIN, int $timestampEnd = PHP_INT_MAX): array|false

Beschreibung

timezone_transitions_get() gibt ein Array zurück, das alle bekannten Zeitzonenübergänge einer DateTimeZone-Instanz enthält. Jeder Eintrag beschreibt einen Moment, zu dem sich Offset, Sommerzeit oder Abkürzung der Zeitzone geändert haben. Dies ist nützlich, um historische und zukünftige DST-Wechsel (Daylight Saving Time) einer Zeitzone zu analysieren.

Jedes Element des zurückgegebenen Arrays ist selbst ein assoziatives Array mit den Schlüsseln ts (Unix-Timestamp des Übergangs), time (UTC-Zeitstring im ISO-8601-Format), offset (Offset in Sekunden relativ zu UTC), isdst (Boolean, ob Sommerzeit gilt) und abbr (Zeitzonenabkürzung, z. B. CET oder CEST).

Die optionalen Parameter $timestampBegin und $timestampEnd ermöglichen es, die Rückgabe auf einen bestimmten Unix-Zeitstempel-Bereich einzuschränken, was die Verarbeitung großer Datenmengen erheblich reduziert. Werden sie weggelassen, liefert die Funktion alle verfügbaren Einträge der Zeitzonendatenbank.

Diese Funktion ist die prozedurale Variante von DateTimeZone::getTransitions() und verhält sich identisch zu dieser Methode.

Parameter

Name Typ Default Beschreibung
$object Pflicht DateTimeZone Ein DateTimeZone-Objekt, dessen Übergänge abgerufen werden sollen.
$timestampBegin int PHP_INT_MIN Optionaler Unix-Timestamp, ab dem Übergänge zurückgegeben werden. Übergänge vor diesem Zeitpunkt werden ignoriert.
$timestampEnd int PHP_INT_MAX Optionaler Unix-Timestamp, bis zu dem Übergänge zurückgegeben werden. Übergänge nach diesem Zeitpunkt werden ignoriert.

Rückgabewert

Typ
array|false
Beschreibung
Gibt ein numerisch indiziertes Array von assoziativen Arrays zurück, wobei jedes Element einen Zeitzonenübergang beschreibt (Schlüssel: ts, time, offset, isdst, abbr). Im Fehlerfall wird false zurückgegeben.

Beispiele

Alle Übergänge einer Zeitzone abrufen

<?php
$tz = new DateTimeZone('Europe/Berlin');
$transitions = timezone_transitions_get($tz);

// Zeige die letzten 3 Einträge
$last = array_slice($transitions, -3);
foreach ($last as $t) {
    echo 'Zeit: ' . $t['time'] . PHP_EOL;
    echo 'Offset: ' . ($t['offset'] / 3600) . ' Stunden' . PHP_EOL;
    echo 'Sommerzeit: ' . ($t['isdst'] ? 'ja' : 'nein') . PHP_EOL;
    echo 'Abkürzung: ' . $t['abbr'] . PHP_EOL;
    echo '---' . PHP_EOL;
}
Zeit: 2037-10-25T01:00:00+0000 Offset: 1 Stunden Sommerzeit: nein Abkürzung: CET --- ...

Übergänge auf ein bestimmtes Jahr eingrenzen

<?php
$tz = new DateTimeZone('Europe/Berlin');

$begin = mktime(0, 0, 0, 1, 1, 2024);
$end   = mktime(23, 59, 59, 12, 31, 2024);

$transitions = timezone_transitions_get($tz, $begin, $end);

foreach ($transitions as $t) {
    $type = $t['isdst'] ? 'Sommerzeit beginnt' : 'Winterzeit beginnt';
    echo date('d.m.Y H:i', $t['ts']) . ' UTC — ' . $type . ' (' . $t['abbr'] . ', Offset ' . ($t['offset'] / 3600) . 'h)' . PHP_EOL;
}
31.03.2024 01:00 UTC — Sommerzeit beginnt (CEST, Offset 2h) 27.10.2024 01:00 UTC — Winterzeit beginnt (CET, Offset 1h)

// Wichtig · Fallstricke

Performance: Ohne Angabe von $timestampBegin und $timestampEnd kann das zurückgegebene Array sehr groß sein, da Zeitzonendatenbanken Einträge bis weit in die Vergangenheit enthalten. Für typische Anwendungen empfiehlt es sich, den Zeitraum einzuschränken.

Zeitzonendaten: Die zurückgegebenen Daten basieren auf der Zeitzonendatenbank (zoneinfo/IANA), die mit PHP oder dem Betriebssystem ausgeliefert wird. Veraltete Zeitzonendaten können zu falschen Ergebnissen führen; es empfiehlt sich, das PHP-Paket timezonedb aktuell zu halten.

Diese Funktion ist funktional identisch mit DateTimeZone::getTransitions() — es handelt sich lediglich um die prozedurale Wrapper-Variante.