W3docs

La función date_get_last_errors() de PHP

Aprende a usar date_get_last_errors() de PHP para obtener advertencias y errores relacionados con fechas en tu código.

¿Estás cansado de lidiar con errores relacionados con fechas en tu código PHP? Si es así, estás de suerte. La función date_get_last_errors() de PHP está aquí para ayudarte.

En este artículo, analizaremos en profundidad cómo funciona la función date_get_last_errors(), sus distintos parámetros y cómo puedes utilizarla para solucionar problemas relacionados con fechas en tu código PHP.

¿Qué es la función date_get_last_errors()?

La función date_get_last_errors() es una función integrada de PHP (disponible desde PHP 5.2.0) que te permite recuperar información sobre el último error o advertencia relacionados con fechas que ocurrió. Devuelve un array asociativo que contiene warning_count, warnings, error_count y errors, los cuales proporcionan los códigos específicos y las descripciones textuales de lo que salió mal durante la última operación de fecha/hora.

Cómo usar date_get_last_errors()

Para usar la función date_get_last_errors(), la llamas después de que una función de creación o modificación de fechas falle. Para código listo para producción, siempre debes verificar que la función de fecha devolvió false antes de recuperar los detalles del error. Aquí tienes un ejemplo:

php— editable, runs on the server

En este ejemplo, intentamos crear un objeto de fecha a partir de la cadena '2022-13-01', que es un valor de fecha inválido (el mes 13 no existe). Después de verificar que date_create_from_format() devolvió false, llamamos a date_get_last_errors() e imprimimos el array devuelto usando print_r().

La salida de este código será:

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

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

)

Como puedes ver, el array devuelto distingue entre advertencias y errores:

  • Los errores significan que la entrada no pudo ser analizada en absoluto (por ejemplo, un carácter extraño o un formato que no coincide con la cadena).
  • Las advertencias significan que la cadena fue analizada, pero el resultado es cuestionable — como un componente fuera de rango. El mes 13 no existe, por lo que PHP lo ajusta o rechaza y genera la advertencia [10] => The parsed date was invalid.

Cuidado: el valor de retorno cuando no hay errores

Un error común es que el valor de retorno cambió entre versiones de PHP:

  • PHP 5.2 – 8.1: siempre devuelve el array asociativo, con warning_count y error_count establecidos en 0 cuando no ocurrió nada malo.
  • PHP 8.2 y posteriores: devuelve false (boolean) cuando la operación de fecha anterior no produjo advertencias ni errores.

Exactamente por eso debes ramificar en el resultado de la propia función de fecha en lugar de en date_get_last_errors():

<?php
// A valid date — parsing succeeds.
$result = date_create_from_format('Y-m-d', '2022-01-15');

if ($result === false) {
    // This branch is skipped because the date is valid.
    print_r(date_get_last_errors());
} else {
    echo "Parsed successfully: " . $result->format('Y-m-d');
}
?>

Salida:

Parsed successfully: 2022-01-15

Dado que $result es un objeto DateTime válido, nunca llamamos a date_get_last_errors(), evitando por completo la sorpresa de false vs. array dependiente de la versión.

Flujo de trabajo práctico para depuración

Al manejar el análisis de fechas en producción, sigue este patrón para capturar y registrar problemas de forma segura:

  1. Llama a la función de creación de fecha (p. ej., date_create_from_format() o DateTime::createFromFormat()).
  2. Verifica si el resultado es false.
  3. Si es false, llama a date_get_last_errors() para inspeccionar los arrays warnings y errors.
  4. Registra o muestra los códigos y mensajes específicos de advertencia/error para identificar el problema exacto de análisis sin detener tu aplicación.

Parámetros

La función date_get_last_errors() no toma parámetros. Simplemente devuelve información sobre el último error o advertencia relacionados con fechas que ocurrió (un array asociativo, o false en PHP 8.2+ cuando no hubo ninguno).

Equivalente orientado a objetos

Si trabajas con la clase DateTime en lugar de las funciones procedurales, la misma información está disponible a través del método estático DateTime::getLastErrors():

<?php
$result = DateTime::createFromFormat('Y-m-d', 'not-a-date');

if ($result === false) {
    print_r(DateTime::getLastErrors());
}
?>

Salida:

Array
(
    [warning_count] => 0
    [warnings] => Array
        (
        )

    [error_count] => 3
    [errors] => Array
        (
            [0] => A four digit year could not be found
            [10] => Not enough data available to satisfy format
        )

)

Esta vez la cadena no puede ser analizada en absoluto, por lo que los problemas se reportan como errores (no advertencias). DateTime::getLastErrors() devuelve la misma estructura que date_get_last_errors() y sigue las mismas reglas de versión descritas anteriormente.

Funciones relacionadas

  • date_create_from_format() — analiza una cadena de fecha según un formato explícito; la función cuyos errores inspeccionas aquí.
  • date_create() — crea un objeto DateTime a partir de una cadena de fecha flexible.
  • checkdate() — valida una fecha gregoriana antes de intentar analizarla.
  • date() — formatea una marca de tiempo una vez que tienes una fecha válida.

Conclusión

La función date_get_last_errors() es una herramienta valiosa para cualquier desarrollador PHP que necesite solucionar errores relacionados con fechas. Al exponer la advertencia o el error específico que ocurrió durante la última operación de fecha/hora, te permite depurar problemas de análisis sin detener tu aplicación. Recuerda los dos hábitos clave: siempre ramifica en el valor de retorno propio de la función de fecha (false), y ten en cuenta el cambio de PHP 8.2+ donde date_get_last_errors() devuelve false cuando no ocurrió nada malo.

Práctica

Práctica
¿Qué hace la función date_get_last_errors() en PHP?
¿Qué hace la función date_get_last_errors() en PHP?
Was this page helpful?