Start · Sprachen · PHP · Referenz · intltz_get_offset

intltz_get_offset

Funktion

Liefert den rohen GMT-Offset sowie den DST-Offset einer Zeitzone für einen bestimmten Zeitpunkt.

seit PHP 5.5.0 Kategorie: string

Signatur

intltz_get_offset(IntlTimeZone $timezone, float $date, bool $local, int &$rawOffset, int &$dstOffset): bool

Beschreibung

intltz_get_offset() ist die prozedurale Variante von IntlTimeZone::getOffset() und ermittelt für eine gegebene Zeitzone und einen Unix-Zeitstempel (in Millisekunden) sowohl den Basis-Offset (rawOffset) als auch den Sommerzeit-Offset (dstOffset) gegenüber UTC.

Der Parameter $date wird in Millisekunden seit dem Unix-Epoch (1. Januar 1970 00:00:00 UTC) angegeben – im Gegensatz zur PHP-üblichen Darstellung in Sekunden. Mit dem Flag $local lässt sich steuern, ob der übergebene Zeitstempel als lokale Zeit oder als UTC-Zeit interpretiert werden soll.

Der tatsächliche Gesamt-Offset ergibt sich aus der Summe von $rawOffset und $dstOffset, jeweils in Millisekunden. Diese Funktion ist besonders nützlich, wenn man programmatisch unterscheiden möchte, ob ein Offset durch die geografische Lage der Zone oder durch Sommerzeit verursacht wird.

Die Funktion steht als prozedurale Variante für Kontexte bereit, in denen keine objektorientierte Arbeitsweise bevorzugt wird, und verhält sich identisch zur Methode IntlTimeZone::getOffset().

Parameter

Name Typ Default Beschreibung
$timezone Pflicht IntlTimeZone Das IntlTimeZone-Objekt, für das der Offset berechnet werden soll.
$date Pflicht float Der Zeitpunkt als Unix-Zeitstempel in Millisekunden (nicht Sekunden). Beispiel: time() * 1000.0 für den aktuellen Zeitpunkt.
$local Pflicht bool Wenn true, wird $date als lokale Zeit (in der Zeitzone) interpretiert; wenn false, als UTC-Zeit.
$rawOffset Pflicht int Ausgabe-Parameter (per Referenz). Enthält nach dem Aufruf den rohen Offset der Zeitzone gegenüber UTC in Millisekunden, ohne Berücksichtigung der Sommerzeit.
$dstOffset Pflicht int Ausgabe-Parameter (per Referenz). Enthält nach dem Aufruf den Sommerzeit-Offset (DST-Offset) in Millisekunden. Im Winter ist dieser Wert typischerweise 0.

Rückgabewert

Typ
bool
Beschreibung
Gibt true bei Erfolg zurück, false bei einem Fehler (z. B. ungültige Zeitzone).

Beispiele

Basis-Nutzung: Offsets für Berlin ermitteln

<?php
// Zeitzone für Berlin erstellen
$tz = intltz_create_time_zone('Europe/Berlin');

// Aktuellen Zeitpunkt in Millisekunden
$dateMs = microtime(true) * 1000.0;

$rawOffset = 0;
$dstOffset = 0;

$success = intltz_get_offset($tz, $dateMs, false, $rawOffset, $dstOffset);

if ($success) {
    $totalOffsetHours = ($rawOffset + $dstOffset) / 3600000;
    echo "Roh-Offset (ms):  " . $rawOffset . PHP_EOL;
    echo "DST-Offset (ms):  " . $dstOffset . PHP_EOL;
    echo "Gesamt-Offset:    " . $totalOffsetHours . " Stunden" . PHP_EOL;
} else {
    echo "Fehler beim Ermitteln des Offsets." . PHP_EOL;
}
Roh-Offset (ms): 3600000 DST-Offset (ms): 3600000 Gesamt-Offset: 2 Stunden

Vergleich von Sommer- und Winterzeit

<?php
$tz = intltz_create_time_zone('America/New_York');

// Sommerzeit: 1. Juli 2024 12:00 UTC (in ms)
$summerDate = mktime(12, 0, 0, 7, 1, 2024) * 1000.0;
// Winterzeit: 1. Januar 2024 12:00 UTC (in ms)
$winterDate = mktime(12, 0, 0, 1, 1, 2024) * 1000.0;

$rawS = $dstS = $rawW = $dstW = 0;

intltz_get_offset($tz, $summerDate, false, $rawS, $dstS);
intltz_get_offset($tz, $winterDate, false, $rawW, $dstW);

echo "Sommer – Roh: " . ($rawS / 3600000) . "h, DST: " . ($dstS / 3600000) . "h" . PHP_EOL;
echo "Winter – Roh: " . ($rawW / 3600000) . "h, DST: " . ($dstW / 3600000) . "h" . PHP_EOL;
Sommer – Roh: -5h, DST: 1h Winter – Roh: -5h, DST: 0h

// Wichtig · Fallstricke

Achtung: Der Zeitstempel muss in Millisekunden angegeben werden. Ein häufiger Fehler ist die direkte Übergabe von time(), das Sekunden liefert. Korrekt ist time() * 1000.0 oder microtime(true) * 1000.0.

Der $rawOffset repräsentiert den festen, geografisch bedingten Offset der Zeitzone (z. B. UTC+1 für Mitteleuropa), während $dstOffset nur während der Sommerzeit einen Wert ungleich null hat. Für die Gesamtverschiebung gegenüber UTC müssen beide Werte addiert werden.

Die prozedurale Form intltz_get_offset() ist funktional identisch mit der Methode IntlTimeZone::getOffset(). Es wird empfohlen, die objektorientierte Variante in modernem Code zu bevorzugen.