Signatur
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
Gibt ein assoziatives Array mit folgenden Schlüsseln zurück:
year,month,day– Datumsangaben als Integer oderfalsehour,minute,second,fraction– Zeitangaben als Integer/Float oderfalsewarning_count,warnings– Anzahl und Liste der Warnungenerror_count,errors– Anzahl und Liste der Fehleris_localtime– Boolean, ob Zeitzoneninformation enthalten istzone_type,zone,is_dst– Zeitzonendaten, falls vorhandenrelative– 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;
}
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']
);
}
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;
}
}
// 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.