Signatur
Beschreibung
DateInvalidTimeZoneException ist eine spezialisierte Ausnahme, die ausgelöst wird, sobald ein ungültiger oder unbekannter Zeitzonenbezeichner an den Konstruktor von DateTimeZone übergeben wird. Sie erweitert DateException und erlaubt damit eine granulare Fehlerbehandlung speziell für Zeitzonenfehler.
Typische Ursachen sind Tippfehler im Zeitzonenbezeichner (z. B. 'Europe/Berln' statt 'Europe/Berlin'), nicht existierende Zonen oder Bezeichner, die von der installierten IANA-Zeitzonendatenbank (tzdata) nicht unterstützt werden. Da die verfügbaren Zeitzonen vom Betriebssystem und der PHP-Version abhängen, sollte die Eingabe stets validiert werden.
Ab PHP 8.3 wirft DateTimeZone::__construct() diese Ausnahme, anstatt nur eine Warnung auszugeben und false zurückzugeben (altes Verhalten). Beim Einsatz von DateTimeImmutable oder DateTime mit ungültigen Zeitzonenwerten kann diese Ausnahme ebenfalls transitiv auftreten.
Durch gezieltes Abfangen von DateInvalidTimeZoneException lässt sich klar zwischen ungültigen Zeitzonen und anderen Datums-/Zeit-Fehlern unterscheiden, was eine präzisere Fehlerbehandlung in Anwendungen ermöglicht.
Beispiele
Ungültigen Zeitzonenbezeichner abfangen
<?php
use DateInvalidTimeZoneException;
try {
$tz = new DateTimeZone('Europa/Berln'); // Ungültige Zone
} catch (DateInvalidTimeZoneException $e) {
echo 'Ungültige Zeitzone: ' . $e->getMessage() . PHP_EOL;
}
Benutzereingabe für Zeitzone sicher verarbeiten
<?php
use DateInvalidTimeZoneException;
function erstelleZeitzone(string $bezeichner): ?DateTimeZone {
try {
return new DateTimeZone($bezeichner);
} catch (DateInvalidTimeZoneException $e) {
// Logging oder Fallback auf Standard-Zeitzone
error_log('Ungültige Zeitzone angegeben: ' . $bezeichner);
return null;
}
}
$zone = erstelleZeitzone($_POST['timezone'] ?? 'UTC');
if ($zone === null) {
echo 'Zeitzone ungültig, bitte korrigieren.' . PHP_EOL;
} else {
$dt = new DateTimeImmutable('now', $zone);
echo 'Aktuelle Zeit: ' . $dt->format('Y-m-d H:i:s T') . PHP_EOL;
}
// Wichtig · Fallstricke
Neu ab PHP 8.3: Vor PHP 8.3 erzeugte DateTimeZone::__construct() lediglich eine E_WARNING und gab im prozeduralen Stil false zurück, anstatt eine Ausnahme zu werfen. Code, der auf das alte Verhalten angewiesen ist, muss für PHP 8.3+ angepasst werden.
Um vor dem Erstellen eines DateTimeZone-Objekts zu prüfen, ob eine Zeitzone gültig ist, kann timezone_identifiers_list() oder in_array($bezeichner, DateTimeZone::listIdentifiers()) verwendet werden. Dies ist jedoch kein Ersatz für die Ausnahmebehandlung, da die Liste je nach Umgebung variieren kann.