Start · Sprachen · PHP · Referenz · intltz_get_dst_savings

intltz_get_dst_savings

Funktion

Gibt die Anzahl der Millisekunden zurück, die bei Sommerzeit (DST) zur Standardzeit der angegebenen Zeitzone hinzuaddiert werden.

seit PHP 5.5.0 Kategorie: string

Signatur

intltz_get_dst_savings(IntlTimeZone $timezone): int

Beschreibung

intltz_get_dst_savings() ist die prozedurale Variante der Methode IntlTimeZone::getDSTSavings() und liefert den Sommerzeit-Offset einer Zeitzone in Millisekunden. Dieser Wert gibt an, um wie viele Millisekunden die Uhrzeit während der Sommerzeit gegenüber der Normalzeit vorgestellt wird – typischerweise 3 600 000 ms (= 1 Stunde).

Die Funktion ist nützlich, wenn man programmatisch prüfen möchte, ob eine Zeitzone überhaupt Sommerzeit kennt und wie groß die Abweichung ist. Zeitzonen ohne Sommerzeitumstellung (z. B. UTC oder Asia/Tokyo) liefern den Wert 0.

Zu beachten ist, dass der Rückgabewert in Millisekunden angegeben wird, nicht in Sekunden oder Minuten. Für die Umrechnung in Stunden muss der Wert durch 3 600 000 geteilt werden.

Diese Funktion gehört zur ICU-basierten Internationalisierungserweiterung (intl) von PHP und ist daher auf Systemen verfügbar, auf denen die intl-Extension aktiviert ist.

Parameter

Name Typ Default Beschreibung
$timezone Pflicht IntlTimeZone Ein IntlTimeZone-Objekt, dessen Sommerzeitverschiebung abgefragt werden soll. Kann z. B. mit IntlTimeZone::createTimeZone() erzeugt werden.

Rückgabewert

Typ
int
Beschreibung
Gibt die Sommerzeitverschiebung der Zeitzone in Millisekunden zurück. Für Zeitzonen ohne Sommerzeit wird 0 zurückgegeben.

Beispiele

DST-Verschiebung für eine europäische Zeitzone abfragen

<?php
$tz = IntlTimeZone::createTimeZone('Europe/Berlin');
$dstSavingsMs = intltz_get_dst_savings($tz);

$dstSavingsHours = $dstSavingsMs / 3600000;

echo "DST-Verschiebung in Millisekunden: " . $dstSavingsMs . PHP_EOL;
echo "DST-Verschiebung in Stunden: " . $dstSavingsHours . PHP_EOL;
DST-Verschiebung in Millisekunden: 3600000 DST-Verschiebung in Stunden: 1

Zeitzonen mit und ohne Sommerzeit vergleichen

<?php
$zeitzonen = ['Europe/Berlin', 'UTC', 'America/New_York', 'Asia/Tokyo'];

foreach ($zeitzonen as $tzName) {
    $tz = IntlTimeZone::createTimeZone($tzName);
    $dst = intltz_get_dst_savings($tz);
    $hatDST = $dst > 0 ? 'Ja' : 'Nein';
    echo sprintf("%s – DST: %s (Offset: %d ms)\n", $tzName, $hatDST, $dst);
}
Europe/Berlin – DST: Ja (Offset: 3600000 ms) UTC – DST: Nein (Offset: 0 ms) America/New_York – DST: Ja (Offset: 3600000 ms) Asia/Tokyo – DST: Nein (Offset: 0 ms)

// Wichtig · Fallstricke

Achtung: Der Rückgabewert ist immer in Millisekunden. Dies ist ein häufiger Fehler, wenn man ihn direkt mit sekunden-basierten PHP-Zeitfunktionen wie time() kombiniert.

Die Funktion gibt die nominale Sommerzeitverschiebung zurück, also den konfigurierten Wert aus der Zeitzonendatenbank. Sie sagt nicht aus, ob zum aktuellen Zeitpunkt tatsächlich Sommerzeit gilt – dafür sollte man intltz_in_daylight_time() in Kombination mit einem IntlCalendar-Objekt verwenden.

Die intl-Extension muss auf dem Server aktiviert sein. Andernfalls führt der Aufruf zu einem schwerwiegenden Fehler (Fatal error).