Start · Sprachen · PHP · Referenz · timezone_offset_get

timezone_offset_get

Funktion

Gibt die Zeitverschiebung einer Zeitzone gegenüber GMT/UTC in Sekunden für einen bestimmten Zeitpunkt zurück.

seit PHP 5.1.0 Kategorie: date

Signatur

timezone_offset_get(DateTimeZone $object, DateTimeInterface $datetime): int|false

Beschreibung

timezone_offset_get() berechnet die Differenz zwischen der angegebenen Zeitzone und GMT/UTC in Sekunden. Der Rückgabewert ist positiv für Zeitzonen östlich von Greenwich und negativ für Zeitzonen westlich davon.

Die Funktion ist der prozedurale Stil von DateTimeZone::getOffset() und benötigt zwei Parameter: ein DateTimeZone-Objekt sowie ein DateTimeInterface-Objekt (z. B. DateTime oder DateTimeImmutable), das den genauen Zeitpunkt definiert, für den die Verschiebung berechnet wird.

Der zweite Parameter ist wichtig, weil Zeitzonen je nach Jahreszeit unterschiedliche Verschiebungen haben können – beispielsweise durch die Sommerzeit (DST). Mit dem DateTimeInterface-Objekt wird sichergestellt, dass die korrekte Offset-Berechnung für den gewünschten Moment erfolgt.

Typische Anwendungsfälle sind die Darstellung lokaler Uhrzeiten für verschiedene Regionen, die Berechnung von Zeitdifferenzen zwischen Zeitzonen sowie die Konvertierung von UTC-Zeitstempeln in lokale Zeiten.

Parameter

Name Typ Default Beschreibung
$object Pflicht DateTimeZone Ein DateTimeZone-Objekt, das die Zeitzone repräsentiert, für die der UTC-Offset ermittelt werden soll.
$datetime Pflicht DateTimeInterface Ein DateTimeInterface-Objekt (z. B. DateTime oder DateTimeImmutable), das den Zeitpunkt definiert, für den die Zeitzonenverschiebung berechnet wird. Dieser Parameter ist notwendig, da die Verschiebung je nach Sommer- oder Winterzeit variieren kann.

Rückgabewert

Typ
int|false
Beschreibung
Gibt die Zeitverschiebung in Sekunden als int zurück. Positive Werte stehen für Zeitzonen östlich von UTC, negative für westliche Zeitzonen. Gibt false zurück, wenn ein Fehler aufgetreten ist.

Beispiele

UTC-Offset für Berlin im Sommer und Winter

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

$summer = new DateTimeImmutable('2024-07-15 12:00:00', new DateTimeZone('UTC'));
$winter = new DateTimeImmutable('2024-01-15 12:00:00', new DateTimeZone('UTC'));

$offsetSummer = timezone_offset_get($tz, $summer);
$offsetWinter = timezone_offset_get($tz, $winter);

echo 'Sommer-Offset: ' . ($offsetSummer / 3600) . ' Stunden' . PHP_EOL;
echo 'Winter-Offset: ' . ($offsetWinter / 3600) . ' Stunden' . PHP_EOL;
Sommer-Offset: 2 Stunden Winter-Offset: 1 Stunden

Zeitverschiebung mehrerer Zeitzonen vergleichen

<?php
$zeitzonen = ['America/New_York', 'Europe/London', 'Asia/Tokyo', 'Australia/Sydney'];
$jetzt = new DateTimeImmutable('now', new DateTimeZone('UTC'));

foreach ($zeitzonen as $tzName) {
    $tz = new DateTimeZone($tzName);
    $offset = timezone_offset_get($tz, $jetzt);
    $stunden = $offset / 3600;
    echo sprintf('%-20s: %+.1f Stunden' . PHP_EOL, $tzName, $stunden);
}
America/New_York : -5.0 Stunden Europe/London : +0.0 Stunden Asia/Tokyo : +9.0 Stunden Australia/Sydney : +11.0 Stunden

// Wichtig · Fallstricke

Sommerzeit (DST): Da Länder wie Deutschland oder die USA die Uhren saisonal umstellen, ist der zweite Parameter $datetime essenziell korrekt anzugeben. Ein falscher Zeitpunkt kann zu einer um eine Stunde falschen Verschiebung führen.

Prozedurale vs. OOP-Stil: timezone_offset_get($tz, $dt) ist funktional identisch mit $tz->getOffset($dt). In modernem PHP-Code wird der OOP-Stil bevorzugt.

Rückgabe in Sekunden: Der Offset wird immer in Sekunden zurückgegeben. Um Stunden zu erhalten, muss durch 3600 dividiert werden.