Start · Sprachen · PHP · Referenz · DateError

DateError

Klasse

Wird geworfen, wenn die Zeitzonen-Datenbank nicht gefunden wird oder ungültige Daten enthält.

seit PHP 8.3.0 Kategorie: error

Signatur

class DateError extends Error

Beschreibung

DateError ist eine Fehlerklasse, die von Error erbt und in PHP 8.3 eingeführt wurde. Sie dient als Basisklasse für schwerwiegende Fehler im Zusammenhang mit Datums- und Zeitzonenfunktionen, insbesondere wenn die Zeitzonen-Datenbank (tzdata) fehlt oder beschädigte bzw. ungültige Daten enthält.

Im Gegensatz zu DateException, die für logische Fehler bei der Datumsverarbeitung vorgesehen ist, signalisiert DateError einen tatsächlichen Systemfehler – beispielsweise wenn PHP die interne Zeitzonendatenbank nicht laden kann. Da es sich um einen Error handelt, sollte er in der Regel nicht einfach ignoriert werden, sondern auf ein Konfigurationsproblem der Laufzeitumgebung hinweisen.

In der Klassen-Hierarchie der PHP-Datumsbehandlung ist DateError die Elternklasse von spezifischeren Fehlerklassen wie DateRangeError. Anwendungen können DateError abfangen, um alle datumsbezogenen Systemfehler zentral zu behandeln.

Typische Szenarien, in denen DateError oder eine ihrer Unterklassen geworfen werden: fehlende oder korrupte tzdata-Bibliothek auf dem Server, oder ein Datumswert liegt außerhalb des darstellbaren Bereichs der internen Implementierung.

Beispiele

DateError abfangen

<?php
try {
    // Simulierter Kontext: Datumsfehler abfangen
    // DateError wird typischerweise intern von PHP geworfen,
    // z. B. bei defekter Zeitzonen-Datenbank
    throw new DateError('Zeitzonen-Datenbank konnte nicht geladen werden.');
} catch (DateError $e) {
    echo 'Datumsfehler aufgetreten: ' . $e->getMessage() . PHP_EOL;
    echo 'Code: ' . $e->getCode() . PHP_EOL;
}
Datumsfehler aufgetreten: Zeitzonen-Datenbank konnte nicht geladen werden. Code: 0

Hierarchisches Abfangen von DateError und DateRangeError

<?php
function createDate(string $dateString): DateTimeImmutable {
    try {
        return new DateTimeImmutable($dateString);
    } catch (DateRangeError $e) {
        // Spezifischer Fehler: Datum außerhalb des gültigen Bereichs
        echo 'Datum außerhalb des Bereichs: ' . $e->getMessage() . PHP_EOL;
        throw $e;
    } catch (DateError $e) {
        // Allgemeiner Datumssystemfehler
        echo 'Allgemeiner Datumsfehler: ' . $e->getMessage() . PHP_EOL;
        throw $e;
    }
}

try {
    $date = createDate('2024-06-15');
    echo $date->format('Y-m-d') . PHP_EOL;
} catch (DateError $e) {
    echo 'Fehler konnte nicht behoben werden.' . PHP_EOL;
}
2024-06-15

// Wichtig · Fallstricke

Wichtig: DateError ist eine Unterklasse von Error, nicht von Exception. Ein generisches catch (Exception $e) wird DateError daher nicht abfangen. Verwende stattdessen catch (DateError $e) oder catch (\Throwable $e) für eine vollständige Fehlerbehandlung.

DateError wurde in PHP 8.3 eingeführt. In älteren PHP-Versionen existiert diese Klasse nicht, was bei der Entwicklung von Bibliotheken mit breiter Versionsunterstützung zu berücksichtigen ist.

Da es sich um einen systemnahen Fehler handelt, sollte das Auftreten von DateError im Produktivbetrieb als kritisches Infrastrukturproblem behandelt und entsprechend geloggt werden.