Signatur
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
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;
}
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;
// 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.