Start · Sprachen · PHP · Referenz · date_parse_from_format

date_parse_from_format

Funktion

Analysiert einen Datums-/Zeitstring anhand eines vorgegebenen Formats und gibt die erkannten Komponenten als assoziatives Array zurück.

seit PHP 5.3.0 Kategorie: date

Signatur

date_parse_from_format(string $format, string $datetime): array

Beschreibung

date_parse_from_format() zerlegt einen Datums- oder Zeitstring nach einem explizit angegebenen Format und liefert die einzelnen Bestandteile (Jahr, Monat, Tag, Stunde, Minute, Sekunde usw.) als assoziatives Array. Im Gegensatz zu date_parse(), das den String selbst interpretiert, gibt man hier das erwartete Format exakt vor – analog zur Schwesterfunktion DateTime::createFromFormat().

Die Funktion ist besonders nützlich, wenn Datumseingaben in einem bekannten, aber ungewöhnlichen Format vorliegen (z. B. d.m.Y oder Y/m/d H:i) und man die Einzelwerte weiterverarbeiten möchte, ohne direkt ein DateTime-Objekt erzeugen zu wollen. Fehler und Warnungen beim Parsing werden im Rückgabe-Array unter den Schlüsseln errors und warnings gemeldet.

Die Formatzeichen entsprechen denselben Buchstaben wie in date() bzw. DateTime::createFromFormat(). Nicht erkannte oder fehlende Felder werden im Array mit dem Wert false belegt. Relativangaben werden ebenfalls unterstützt und im Schlüssel relative ausgegeben.

Parameter

Name Typ Default Beschreibung
$format Pflicht string Das Formatmuster, nach dem datetime geparst wird. Verwendet dieselben Formatzeichen wie date(), z. B. d.m.Y, Y-m-d H:i:s.
$datetime Pflicht string Der Datums- und/oder Zeitstring, der gemäß format analysiert werden soll, z. B. "23.06.2024" oder "2024-06-23 15:30:00".

Rückgabewert

Typ
array
Beschreibung

Gibt ein assoziatives Array mit folgenden Schlüsseln zurück:

  • year, month, day – Datumsangaben als Integer oder false
  • hour, minute, second, fraction – Zeitangaben als Integer/Float oder false
  • warning_count, warnings – Anzahl und Liste der Warnungen
  • error_count, errors – Anzahl und Liste der Fehler
  • is_localtime – Boolean, ob Zeitzoneninformation enthalten ist
  • zone_type, zone, is_dst – Zeitzonendaten, falls vorhanden
  • relative – Array mit relativen Zeitangaben, falls enthalten

Beispiele

Deutsches Datumsformat parsen

<?php
$result = date_parse_from_format('d.m.Y', '23.06.2024');

echo 'Jahr:  ' . $result['year']  . PHP_EOL;
echo 'Monat: ' . $result['month'] . PHP_EOL;
echo 'Tag:   ' . $result['day']   . PHP_EOL;

if ($result['error_count'] === 0) {
    echo 'Kein Fehler beim Parsen.' . PHP_EOL;
}
Jahr: 2024 Monat: 6 Tag: 23 Kein Fehler beim Parsen.

Datum mit Uhrzeit und Fehlerprüfung

<?php
$format   = 'Y-m-d H:i:s';
$datetime = '2024-06-23 15:30:45';

$result = date_parse_from_format($format, $datetime);

if ($result['error_count'] > 0) {
    echo 'Fehler: ' . implode(', ', $result['errors']) . PHP_EOL;
} else {
    printf(
        "Datum: %04d-%02d-%02d, Uhrzeit: %02d:%02d:%02d\n",
        $result['year'],
        $result['month'],
        $result['day'],
        $result['hour'],
        $result['minute'],
        $result['second']
    );
}
Datum: 2024-06-23, Uhrzeit: 15:30:45

Ungültiges Datum erkennen

<?php
$result = date_parse_from_format('d.m.Y', '31.02.2024');

echo 'Fehleranzahl: ' . $result['error_count'] . PHP_EOL;

if ($result['warning_count'] > 0) {
    foreach ($result['warnings'] as $pos => $msg) {
        echo "Warnung an Position $pos: $msg" . PHP_EOL;
    }
}
Fehleranzahl: 0 Warnung an Position 8: The parsed date was invalid

// Wichtig · Fallstricke

Fehlende Felder: Enthält das Format keine Zeitkomponenten, werden hour, minute, second und fraction als false zurückgegeben – nicht als 0. Dies ist ein häufiger Fallstrick bei der Weiterverarbeitung.

Validierung: Die Funktion prüft nicht zwingend die logische Korrektheit (z. B. ob der 31. Februar existiert); ungültige Kombinationen erscheinen als Warnungen in warnings, nicht unbedingt als Fehler in errors. Für eine zuverlässige Validierung sollte man das Ergebnis zusätzlich mit checkdate() überprüfen oder DateTime::createFromFormat() verwenden und dessen Rückgabewert auswerten.

Zeitzone: Wenn der Formatstring keine Zeitzonendaten enthält, ist is_localtime gleich false; es wird keine Standardzeitzone angewendet.