Start · Sprachen · PHP · Referenz · date_offset_get

date_offset_get

Funktion

Gibt den aktuellen Zeitzonenversatz (Offset) eines <code>DateTimeInterface</code>-Objekts in Sekunden relativ zu UTC zurück.

seit PHP 5.2.0 Kategorie: date

Signatur

date_offset_get(DateTimeInterface $object): int

Beschreibung

date_offset_get() ist die prozedurale Entsprechung der Methode DateTime::getOffset() bzw. DateTimeImmutable::getOffset(). Die Funktion liefert den Zeitversatz des übergebenen Datumsobjekts gegenüber der koordinierten Weltzeit (UTC) in Sekunden als Integer-Wert.

Der zurückgegebene Wert berücksichtigt sowohl die statische Basisverschiebung der Zeitzone als auch eventuelle Sommerzeit-Anpassungen (DST), die zum Zeitpunkt des gespeicherten Datums gültig sind. So kann beispielsweise Europe/Berlin je nach Jahreszeit +3600 (Winter, UTC+1) oder +7200 (Sommer, UTC+2) zurückgeben.

Die Funktion eignet sich besonders dann, wenn man den tatsächlichen Offset für einen konkreten Zeitpunkt ermitteln möchte, etwa um manuelle Zeitzonenberechnungen durchzuführen oder den Offset für externe Systeme, APIs oder Logging aufzubereiten.

Positive Werte stehen für Zeitzonen östlich von UTC, negative Werte für Zeitzonen westlich davon.

Parameter

Name Typ Default Beschreibung
$object Pflicht DateTimeInterface Ein DateTime- oder DateTimeImmutable-Objekt, dessen Zeitzonenversatz ermittelt werden soll.

Rückgabewert

Typ
int
Beschreibung
Der Zeitzonenversatz in Sekunden relativ zu UTC. Positive Werte stehen für Zeitzonen östlich von UTC, negative für Zeitzonen westlich davon. Im Fehlerfall wird false zurückgegeben.

Beispiele

Offset für eine europäische Zeitzone ermitteln

<?php
// Datum im Winter (keine Sommerzeit)
$dtWinter = new DateTime('2024-01-15 12:00:00', new DateTimeZone('Europe/Berlin'));
$offsetWinter = date_offset_get($dtWinter);
echo 'Winterversatz: ' . $offsetWinter . ' Sekunden (' . ($offsetWinter / 3600) . ' Stunden)' . PHP_EOL;

// Datum im Sommer (mit Sommerzeit)
$dtSommer = new DateTime('2024-07-15 12:00:00', new DateTimeZone('Europe/Berlin'));
$offsetSommer = date_offset_get($dtSommer);
echo 'Sommerversatz: ' . $offsetSommer . ' Sekunden (' . ($offsetSommer / 3600) . ' Stunden)' . PHP_EOL;
Winterversatz: 3600 Sekunden (1 Stunden) Sommerversatz: 7200 Sekunden (2 Stunden)

Offset für verschiedene Zeitzonen vergleichen

<?php
$zeitzonen = ['UTC', 'America/New_York', 'Asia/Tokyo', 'Australia/Sydney'];
$datum = '2024-06-01 00:00:00';

foreach ($zeitzonen as $tz) {
    $dt = new DateTimeImmutable($datum, new DateTimeZone($tz));
    $offset = date_offset_get($dt);
    $stunden = $offset / 3600;
    echo sprintf('%-20s Offset: %+.1f Stunden%s', $tz, $stunden, PHP_EOL);
}
UTC Offset: +0.0 Stunden America/New_York Offset: -4.0 Stunden Asia/Tokyo Offset: +9.0 Stunden Australia/Sydney Offset: +10.0 Stunden

// Wichtig · Fallstricke

Achtung: Der Offset ist abhängig vom gespeicherten Zeitpunkt im Objekt, nicht von der aktuellen Systemzeit. Wenn also ein Datum im Winter erzeugt wurde, wird auch im Sommer der Winter-Offset zurückgegeben — das Objekt selbst legt den Bezugspunkt fest.

Bei der Verwendung von DateTimeImmutable verhält sich die Funktion identisch zu DateTime. Beide implementieren DateTimeInterface, sodass date_offset_get() mit beiden Typen genutzt werden kann.

Diese Funktion ist identisch mit dem Aufruf von $dt->getOffset(). In modernem PHP-Code wird die objektorientierte Methode bevorzugt.