PHP 8.4.1 Released!

date_parse_from_format

(PHP 5 >= 5.3.0, PHP 7, PHP 8)

date_parse_from_formatErmittelt Informationen über das angegebene Datum anhand des angegebenen Formats

Beschreibung

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

Gibt ein assoziatives Array mit detaillierten Informationen über das angegebene Datum und die angegebene Uhrzeit zurück.

Parameter-Liste

format

Zur Verwendung des Parameters format siehe die Dokumentation von DateTimeImmutable::createFromFormat(). Es gelten die gleichen Regeln.

datetime

Eine Zeichenkette, die Datum und Uhrzeit angibt.

Rückgabewerte

Gibt ein assoziatives Array mit detaillierten Informationen über das angegebene Datum und die angegebene Uhrzeit zurück.

Das zurückgegebene Array hat Schlüssel für year, month, day, hour, minute, second, fraction und is_localtime.

Wenn is_localtime angegeben ist, gibt zone_type den Typ der Zeitzone an. Für Typ 1 (UTC-Offset) werden die Felder zone und is_dst hinzugefügt; für Typ 2 (Zeitzonen-Abkürzung) werden die Felder tz_abbr und is_dst hinzugefügt; und für Typ 3 (Zeitzonen-Kennung) werden die Felder tz_abbr und tz_id hinzugefügt.

Das Array enthält die Felder warning_count und warnings. Das erste gibt an, wie viele Warnungen es gab. Die Schlüssel des Arrays warnings geben die Positionen im angegebenen datetime an, an denen die Warnungen aufgetreten sind, während die Werte die Warnungen selbst beschreiben. Das folgende Beispiel zeigt eine solche Warnung.

Das Array enthält auch die Felder error_count und errors. Das erste Feld gibt an, wie viele Fehler gefunden wurden. Die Schlüssel des Arrays errors geben die Positionen im angegebenen datetime an, an denen die Fehler aufgetreten sind, während die Werte die Fehler selbst beschreiben. Das folgende Beispiel zeigt einen solchen Fehler.

Warnung

Die Anzahl der Array-Elemente in den Arrays warnings und errors kann kleiner sein als warning_count oder error_count, wenn die Warnungen bzw. Fehler an derselben Stelle aufgetreten sind.

Fehler/Exceptions

Wenn der Parameter datetime NULL-Bytes enthält, wirft diese Funktion einen ValueError.

Changelog

Version Beschreibung
8.0.21, 8.1.8, 8.2.0 Wenn in datetime NULL-Bytes übergeben werden, wird nun ein ValueError geworfen; vorher wurde dies stillschweigend ignoriert.
7.2.0 Das Element zone des zurückgegebenen Arrays stellt nun Sekunden statt Minuten dar und das Vorzeichen ist umgekehrt. Zum Beispiel wird aus -120 nun 7200.

Beispiele

Beispiel #1 date_parse_from_format()-Beispiel

<?php
$date
= "6.1.2009 13:00+01:00";
print_r(date_parse_from_format("j.n.Y H:iP", $date));
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

Array
(
    [year] => 2009
    [month] => 1
    [day] => 6
    [hour] => 13
    [minute] => 0
    [second] => 0
    [fraction] =>
    [warning_count] => 0
    [warnings] => Array
        (
        )

    [error_count] => 0
    [errors] => Array
        (
        )

    [is_localtime] => 1
    [zone_type] => 1
    [zone] => 3600
    [is_dst] =>
)

Beispiel #2 date_parse_from_format()-Beispiel mit Warnungen

<?php
$date
= "26 August 2022 22:30 pm";
$parsed = date_parse_from_format("j F Y G:i a", $date);

echo
"Anzahl der Warnungen: ", $parsed['warning_count'], "\n";
foreach (
$parsed['warnings'] as $position => $message) {
echo
"\tAn Position {$position}: {$message}\n";
}
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

Anzahl der Warnungen: 1
	An Position 23: The parsed time was invalid

Beispiel #3 date_parse_from_format()-Beispiel mit Fehlern

<?php
$date
= "26 August 2022 CEST";
$parsed = date_parse_from_format("j F Y H:i", $date);

echo
"Anzahl der Fehler: ", $parsed['error_count'], "\n";
foreach (
$parsed['errors'] as $position => $message) {
echo
"\tAn Position {$position}: {$message}\n";
}
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

Anzahl der Fehler: 3
	An Position 15: A two digit hour could not be found
	An Position 19: Data missing

Siehe auch

add a note

User Contributed Notes 1 note

up
0
jp dot amarok at email dot cz
1 month ago
It seems that the safest way to check for errors is not by checking the number of errors, but warnings instead. See the following example where "m" and "d" are swapped and thus not correct.

<?php
var_dump
( date_parse_from_format('m.d.Y', '18.10.2024') );

OUTPUT:
array(
12) {
[
"year"]=>
int(2024)
[
"month"]=>
int(18)
[
"day"]=>
int(10)
[
"hour"]=>
bool(false)
[
"minute"]=>
bool(false)
[
"second"]=>
bool(false)
[
"fraction"]=>
bool(false)
[
"warning_count"]=>
int(1)
[
"warnings"]=>
array(
1) {
[
10]=>
string(27) "The parsed date was invalid"
}
[
"error_count"]=>
int(0)
[
"errors"]=>
array(
0) {
}
[
"is_localtime"]=>
bool(false)
}
?>

The function simply assigns 18 to the "month" field without errors!! So simply use an if-condition and check "warning_count" to detect possible errors.
To Top