date_parse_from_format

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

date_parse_from_formatRecupera las informaciones de una fecha dada siguiendo un formato específico

Descripción

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

Devuelve un array asociativo que contiene informaciones detalladas sobre una fecha/hora dada.

Parámetros

format

Documentación sobre el uso del format, por favor referirse a la documentación de DateTimeImmutable::createFromFormat(). Las mismas reglas se aplican.

datetime

Cadena que representa la fecha/hora.

Valores devueltos

Devuelve un array asociativo con informaciones detalladas sobre la fecha/hora dada.

El array devuelto tiene claves para year, month, day, hour, minute, second, fraction, y is_localtime.

Si is_localtime está presente, entonces zone_type indica el tipo de zona horaria. Para el tipo 1 (desplazamiento UTC) se añaden los campos zone y is_dst. Para el tipo 2 (abreviatura) se añaden los campos tz_abbr y is_dst. Para el tipo 3 (identificador de zona horaria) se añaden los campos tz_abbr y tz_id.

El array incluye los campos warning_count y warnings. El primero indica el número de advertencias. Las claves del array warnings indican la posición en el parámetro datetime donde ocurrió la advertencia, con el valor de cadena que describe la advertencia misma. Un ejemplo a continuación muestra tal advertencia.

El array incluye también los campos error_count y errors. El primero indica el número de errores. Las claves del array errors indican la posición en el parámetro datetime donde ocurrió el error, con el valor de cadena que describe la advertencia misma. Un ejemplo a continuación muestra tal advertencia.

Advertencia

El número de elementos de array en los arrays warnings y errors puede ser inferior a warning_count o error_count si ocurrieron en la misma posición.

Errores/Excepciones

Esta función lanza una ValueError cuando el datetime contiene bytes NULL.

Historial de cambios

Versión Descripción
8.0.21, 8.1.8, 8.2.0 Ahora lanza una ValueError cuando se pasan bytes NULL en datetime, lo cual antes era ignorado silenciosamente.
7.2.0 El elemento zone del array devuelto representa segundos en lugar de minutos ahora, y su signo es invertido. Por ejemplo -120 ahora es igual a 7200.

Ejemplos

Ejemplo #1 Ejemplo con date_parse_from_format()

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

El resultado del ejemplo sería:

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] =>
)

Ejemplo #2 Ejemplo de date_parse_from_format() con advertencias

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

echo
"Warnings count: ", $parsed['warning_count'], "\n";
foreach (
$parsed['warnings'] as $position => $message) {
echo
"\tOn position {$position}: {$message}\n";
}
?>

El resultado del ejemplo sería:

Warnings count: 1
	On position 23: The parsed time was invalid

Ejemplo #3 Ejemplo de date_parse_from_format() con errores

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

echo
"Errors count: ", $parsed['error_count'], "\n";
foreach (
$parsed['errors'] as $position => $message) {
echo
"\tOn position {$position}: {$message}\n";
}
?>

El resultado del ejemplo sería:

Errors count: 3
	On position 15: A two digit hour could not be found
	On position 19: Data missing

Ver también

add a note

User Contributed Notes 1 note

up
0
jp dot amarok at email dot cz
8 months 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