betterCode() PHP 2025

DateTimeImmutable::getLastErrors

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

DateTimeImmutable::getLastErrorsDevuelve las advertencias y errores

Descripción

public static DateTimeImmutable::getLastErrors(): array|false

Devuelve un array de advertencias y errores encontrados mientras se analizaba una cadena de fecha/hora.

Parámetros

Esta función no contiene ningún parámetro.

Valores devueltos

Devuelve un array que contiene información sobre advertencias y errores, o false si no hay ni advertencias ni errores.

Historial de cambios

Versión Descripción
8.2.0 Antes de PHP 8.2.0, esta función no devolvía false cuando no había advertencias ni errores. En su lugar, siempre devolvía la estructura de array documentada.

Ejemplos

Ejemplo #1 DateTimeImmutable::getLastErrors() example

<?php
try {
$date = new DateTimeImmutable('asdfasdf');
} catch (
Exception $e) {
// Solo para fines de demostración...
print_r(DateTimeImmutable::getLastErrors());

// La forma correcta de hacer esto con programación orientada a objetos es
echo $e->getMessage();
}
?>

El ejemplo anterior mostrará:

Array
(
    [warning_count] => 1
    [warnings] => Array
        (
            [6] => Double timezone specification
        )

    [error_count] => 1
    [errors] => Array
        (
            [0] => The timezone could not be found in the database
        )
)
Failed to parse time string (asdfasdf) at position 0 (a): The timezone could not be found in the database

Los índices 6, y 0 en la salida de ejemplo se refieren al índice de caracteres en la cadena donde ocurrió el error.

Ejemplo #2 Detectando fechas desbordadas

<?php
$date
= DateTimeImmutable::createFromFormat('!Y-m-d', '2020-02-30');
print_r(DateTimeImmutable::getLastErrors());

El ejemplo anterior mostrará:

Array
(
    [warning_count] => 1
    [warnings] => Array
        (
            [10] => The parsed date was invalid
        )

    [error_count] => 0
    [errors] => Array
        (
        )
)
add a note

User Contributed Notes 1 note

up
-1
_mittens
2 years ago
If you are curious as to when the internal array gets resetted (from https://onlinephp.io/c/3ee35):

<?php

$date0
= DateTimeImmutable::createFromFormat('!Y-m-d', '2020-31-31');
var_dump($date0->format('c')); // 2022-07-31T00:00:00+00:00

foreach(range(0,2) as $_)
// The internal error won't reset
var_dump( join(DateTimeImmutable::getLastErrors()['warnings']) ); // The parsed date was invalid

$date1 = DateTimeImmutable::createFromFormat('!Y-m-d', '2020-12-31');
var_dump($date1->format('c')); // 2020-12-31T00:00:00+00:00

// The internal error did reset
var_dump( empty(DateTimeImmutable::getLastErrors()['warnings']) ); // true

$date2 = DateTimeImmutable::createFromFormat('!Y-m-d', '2020-31-31');
var_dump( join(DateTimeImmutable::getLastErrors()['warnings']) ); // The parsed date was invalid
$date3 = new DateTimeImmutable('2023-12-31T00:00:00.000000Z');

// The internal error did reset
var_dump( empty(DateTimeImmutable::getLastErrors()['warnings']) ); // true
?>

Output:
string(25) "2022-07-31T00:00:00+00:00"
string(27) "The parsed date was invalid"
string(27) "The parsed date was invalid"
string(27) "The parsed date was invalid"
string(25) "2020-12-31T00:00:00+00:00"
bool(true)
string(27) "The parsed date was invalid"
bool(true)
To Top