W3docs

Función PHP date_create_from_format: Sintaxis y Ejemplos

Aprende a usar date_create_from_format en PHP para crear objetos DateTime desde cadenas con formatos no estándar, con ejemplos y manejo de errores.

La función date_create_from_format() analiza una cadena de fecha escrita en tu formato — no solo los formatos que PHP intenta adivinar — y devuelve un objeto DateTime. Úsala siempre que recibas una fecha en un diseño fijo y no estándar (una exportación CSV, una API de terceros, un formulario de usuario) y necesites interpretarla de forma confiable.

Esta página cubre la sintaxis, ejemplos ejecutables, el parámetro de zona horaria, cómo detectar fallos de análisis y cómo se diferencia la función de strtotime() y date_parse_from_format().

Sintaxis

date_create_from_format(string $format, string $datetime, ?DateTimeZone $timezone = null): DateTime|false
  • $format — el diseño de la cadena de entrada, escrito con los mismos caracteres de formato que la función date(). Por ejemplo, "Y-m-d H:i:s" coincide con "2023-03-02 17:30:45".
  • $datetime — la cadena de fecha a analizar. Su diseño debe coincidir con $format.
  • $timezone(opcional) un DateTimeZone para el objeto resultante. Si se omite, se usa la zona horaria predeterminada actual (establecida mediante date_default_timezone_set()). El parámetro se ignora si $format ya contiene un carácter de zona horaria como e, O, P o T.

Devuelve un objeto DateTime en caso de éxito, o false si la cadena no coincide con el formato.

date_create_from_format() es el alias procedimental del método estático DateTime::createFromFormat() — se comportan de forma idéntica.

Ejemplos

Análisis de una cadena de fecha estándar

php— editable, runs on the server

La función lee "2023-03-02 17:30:45" según "Y-m-d H:i:s" y devuelve un objeto DateTime. Al llamar a format() sobre él puedes volver a representar la fecha en el diseño que desees.

Reformateo de una fecha no estándar

php— editable, runs on the server

Aquí la entrada usa un día, un nombre de mes de tres letras y un año de cuatro dígitos (j-M-Y). La salida se representa en orden ISO (Y-m-d) — prueba de que, una vez que una fecha es un objeto DateTime, puedes mostrarla como quieras.

Restablecimiento de la hora con !

Si tu formato no tiene campos de hora, las partes que faltan toman como valor predeterminado la hora, el minuto y el segundo actuales — lo cual raramente es lo que quieres para un valor de solo fecha. Agrega como prefijo ! al formato para restablecer todos los campos no especificados al epoch de Unix (00:00:00):

<?php

$date = date_create_from_format('!Y-m-d', '2023-03-02');
echo $date->format('Y-m-d H:i:s'); // Output: 2023-03-02 00:00:00

Suministro de una zona horaria

<?php

$tz = new DateTimeZone('Europe/Paris');
$date = date_create_from_format('Y-m-d H:i:s', '2023-03-02 17:30:45', $tz);
echo $date->format('Y-m-d H:i:s P'); // Output: 2023-03-02 17:30:45 +01:00

El tercer argumento ancla la fecha analizada a la hora de París, por lo que el token P informa el desplazamiento +01:00.

Manejo de fallos de análisis

Cuando la cadena no coincide con el formato, la función devuelve false en lugar de lanzar una excepción. Comprueba siempre este caso y lee DateTime::getLastErrors() para obtener los detalles:

<?php

$date = date_create_from_format('Y-m-d', 'not-a-date');

if ($date === false) {
    $errors = DateTime::getLastErrors();
    echo "Parse failed: {$errors['error_count']} error(s)\n";
    // Output: Parse failed: 3 error(s)
}

Como false es falsy, un simple if (!$date) también funciona — pero una comprobación estricta === false es más segura cuando un valor vacío podría legítimamente significar otra cosa.

Comparación con otras funciones de fecha

FunciónEntradaDevuelve
date_create_from_format()string + formato explícitoDateTime (o false)
strtotime()string que PHP intenta adivinartimestamp Unix int (o false)
date_parse_from_format()string + formato explícitoarray asociativo de componentes

Usa date_create_from_format() cuando el diseño sea fijo y quieras un objeto DateTime completo para manipular. Usa strtotime() para cadenas informales de estilo humano como "next Friday", y date_parse_from_format() cuando solo necesites los números brutos de año/mes/día sin crear un objeto.

Conclusión

date_create_from_format() convierte una cadena en un diseño arbitrario y conocido en un objeto DateTime que puedes formatear, comparar y desplazar con el resto de la API de fechas de PHP. Recuerda usar el prefijo ! para valores de solo fecha, pasar un DateTimeZone cuando la zona horaria de origen importe, y protegerte siempre contra el retorno false.

Práctica

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