Start · Sprachen · PHP · Referenz · intltz_has_same_rules

intltz_has_same_rules

Funktion

Prüft, ob zwei <code>IntlTimeZone</code>-Objekte dieselben Zeitzonenregeln und denselben UTC-Offset verwenden.

seit PHP 5.5.0 Kategorie: string

Signatur

intltz_has_same_rules(IntlTimeZone $timezone, IntlTimeZone $other): bool

Beschreibung

intltz_has_same_rules() ist die prozedurale Variante der Methode IntlTimeZone::hasSameRules() und vergleicht zwei Zeitzonenobjekte daraufhin, ob sie identische Regeln (d. h. Sommerzeit-Übergänge, Offset-Definitionen usw.) besitzen. Dabei wird nicht geprüft, ob es sich um dieselbe Zeitzone handelt – eine Zone kann denselben Regeln wie eine andere folgen, ohne denselben Namen zu tragen.

Die Funktion ist dann nützlich, wenn man ermitteln möchte, ob zwei Zeitzonen für praktische Zwecke gleichwertig sind, z. B. bei der Lokalisierung von Terminen oder beim Vergleich von Benutzerpräferenzen mit serverseitigen Zeitzonen. Sie greift intern auf die ICU-Bibliothek zurück und berücksichtigt historische Regeländerungen nur eingeschränkt – sie vergleicht die aktuell gültigen Regeln.

Diese Funktion gibt true zurück, wenn beide Zonen dieselben Offset- und DST-Regeln teilen, andernfalls false. Bei ungültigen Argumenten liefert sie ebenfalls false.

Parameter

Name Typ Default Beschreibung
$timezone Pflicht IntlTimeZone Das primäre IntlTimeZone-Objekt, dessen Regeln verglichen werden sollen.
$other Pflicht IntlTimeZone Das zweite IntlTimeZone-Objekt, mit dem verglichen wird.

Rückgabewert

Typ
bool
Beschreibung
Gibt true zurück, wenn beide Zeitzonen dieselben Regeln und denselben UTC-Offset verwenden, andernfalls false.

Beispiele

Vergleich zweier Zeitzonen mit gleichen Regeln

<?php
// Europe/Berlin und Europe/Vienna folgen beide der MEZ/MESZ-Regel
$tz1 = IntlTimeZone::createTimeZone('Europe/Berlin');
$tz2 = IntlTimeZone::createTimeZone('Europe/Vienna');

if (intltz_has_same_rules($tz1, $tz2)) {
    echo 'Beide Zeitzonen haben dieselben Regeln.';
} else {
    echo 'Die Zeitzonen unterscheiden sich in ihren Regeln.';
}
Beide Zeitzonen haben dieselben Regeln.

Vergleich zweier Zeitzonen mit unterschiedlichen Regeln

<?php
// Europe/Berlin (MEZ, UTC+1/UTC+2) vs. America/New_York (EST, UTC-5/UTC-4)
$tz1 = IntlTimeZone::createTimeZone('Europe/Berlin');
$tz2 = IntlTimeZone::createTimeZone('America/New_York');

$result = intltz_has_same_rules($tz1, $tz2);
var_dump($result);

// Praktischer Einsatz: Benutzer-Zeitzone mit Server-Zeitzone vergleichen
$userTz   = IntlTimeZone::createTimeZone('Europe/Amsterdam');
$serverTz = IntlTimeZone::createTimeZone('Europe/Berlin');

if (intltz_has_same_rules($userTz, $serverTz)) {
    echo 'Keine Zeitzonenkonvertierung erforderlich.';
} else {
    echo 'Zeitzonenkonvertierung ist notwendig.';
}
bool(false) Keine Zeitzonenkonvertierung erforderlich.

// Wichtig · Fallstricke

Hinweis zur ICU-Version: Das Ergebnis des Vergleichs hängt von der auf dem System installierten ICU-Bibliothek ab. Unterschiedliche ICU-Versionen können bei historisch geänderten Zeitzonenregeln zu abweichenden Ergebnissen führen.

Kein Namensvergleich: Zwei Zeitzonen mit unterschiedlichen Namen (z. B. Europe/Berlin und Europe/Vienna) können true liefern, da nur die Regelstruktur, nicht der Bezeichner verglichen wird. Soll die Identität geprüft werden, muss IntlTimeZone::getID() herangezogen werden.

Diese Funktion ist die prozedurale Entsprechung zu IntlTimeZone::hasSameRules(). Beide sind funktional äquivalent.