date_parse()
La función date_parse() en PHP analiza una cadena de fecha y la convierte en un array asociativo con sus componentes individuales.
Introducción
La función date_parse() en PHP toma una cadena de fecha legible por humanos y la desglosa en sus componentes individuales — año, mes, día, hora, minuto, segundo — devolviéndolos como un array asociativo. De forma fundamental, también reporta cualquier advertencia y error que encontró al interpretar la cadena, lo que la convierte en una herramienta útil para validar la entrada de fechas antes de actuar sobre ella.
A diferencia de strtotime(), que colapsa una cadena de fecha en un único timestamp Unix, date_parse() mantiene cada parte por separado y nunca descarta los diagnósticos. Esa distinción es la razón principal para utilizarla: cuando necesitas saber no solo qué fecha es, sino si la entrada era realmente una fecha válida.
Esta página cubre la sintaxis, la forma completa del array devuelto, cómo leer advertencias y errores, y cómo date_parse() se compara con las funciones relacionadas.
Sintaxis
date_parse(string $datetime): arraySiempre devuelve un array (nunca devuelve false); cuando el análisis falla, el fallo se describe en la clave errors en lugar de señalarse mediante el valor de retorno.
Parámetros
$datetime — una string que representa la fecha/hora a analizar. Acepta los mismos formatos flexibles que entiende el analizador de fechas interno de PHP, por ejemplo:
'2022-03-03 15:30:45'— fecha y hora completas en estilo ISO'July 4, 2023'— lenguaje natural'now','tomorrow','+1 week'— expresiones relativas
Si un componente está ausente en la string (por ejemplo, no se proporciona hora), su clave se devuelve como un valor vacío en lugar de omitirse.
Valor de retorno
La función devuelve un array asociativo con las siguientes claves:
year,month,day— los componentes de la fecha (enteros, o vacío si no están presentes)hour,minute,second— los componentes de la hora (enteros, o vacío si no están presentes)fraction— la parte fraccionaria de los segundos (un float, p. ej.0)warning_count— el número de advertencias generadas durante el análisiswarnings— un array de advertencias, indexado por la posición del carácter en la entradaerror_count— el número de errores generados durante el análisiserrors— un array de errores, indexado por la posición del carácter en la entradais_localtime— si la string contenía información de zona horaria
Cuando is_localtime es true, claves adicionales como zone_type, zone e is_dst describen la zona horaria.
Ejemplo básico
Analicemos una cadena completa de fecha y hora:
Salida:
Array
(
[year] => 2022
[month] => 3
[day] => 3
[hour] => 15
[minute] => 30
[second] => 45
[fraction] => 0
[warning_count] => 0
[warnings] => Array()
[error_count] => 0
[errors] => Array()
[is_localtime] =>
)Cada componente está ahora disponible individualmente — por ejemplo, $date_arr['month'] es 3. Como error_count y warning_count son ambos 0, sabemos que la cadena era una fecha limpia y válida.
Análisis de una fecha parcial
date_parse() no requiere una fecha completa. Si solo pasas una fecha sin hora, las claves de hora vuelven vacías:
<?php
$result = date_parse('July 4, 2023');
echo "Year: {$result['year']}\n";
echo "Month: {$result['month']}\n";
echo "Day: {$result['day']}\n";
echo "Hour: '{$result['hour']}'\n"; // empty — no time was givenSalida:
Year: 2023
Month: 7
Day: 4
Hour: ''Esto es muy útil cuando aceptas fechas sin horas y quieres las piezas individuales sin escribir un analizador personalizado.
Detección de fechas inválidas con advertencias
Aquí es donde date_parse() brilla. Considera el 30 de febrero — una fecha que no existe. El analizador igualmente devolverá valores, pero marcará el problema en warnings:
<?php
$result = date_parse('2023-02-30');
if ($result['warning_count'] > 0) {
foreach ($result['warnings'] as $position => $message) {
echo "Warning at position $position: $message\n";
}
}Salida:
Warning at position 11: The parsed date was invalidSiempre verifica error_count (la cadena no pudo entenderse en absoluto) y warning_count (la cadena se entendió pero describe una fecha imposible) antes de confiar en los componentes analizados. Para una verificación estricta de sí/no en el calendario sobre un año-mes-día específico, combínala con checkdate().
Cuándo usar date_parse() frente a funciones relacionadas
| Función | Devuelve | Úsala cuando |
|---|---|---|
date_parse() | Array de componentes + advertencias/errores | Necesitas las partes individuales y quieres validar la entrada |
date_parse_from_format() | El mismo array, pero analizado contra un formato explícito | La entrada sigue un formato conocido y fijo que quieres aplicar |
strtotime() | Un único timestamp Unix | Solo necesitas un timestamp para cálculos |
date_create_from_format() | Un objeto DateTime | Quieres un objeto completo para formatear o hacer operaciones con fechas |
Si más tarde necesitas renderizar una fecha, consulta date() para formatear los componentes en una cadena.
Conclusión
La función date_parse() ofrece una manera sencilla de desglosar una cadena de fecha en sus componentes individuales mientras reporta cualquier advertencia y error en el proceso. Ese doble papel — extracción y validación — la hace especialmente útil para verificar fechas proporcionadas por el usuario antes de procesarlas. Combínala con checkdate() para una validación estricta, o con strtotime() y DateTime cuando necesites timestamps u objetos de fecha completos.