date_create()
Aprende a crear fechas en PHP con date_create(): sintaxis, parámetros, valores de retorno y ejemplos prácticos de uso.
Introducción
La función date_create() de PHP es la forma procedimental de construir un objeto DateTime — el bloque fundamental orientado a objetos para casi todo el trabajo con fechas y horas en PHP. Este artículo cubre su sintaxis y parámetros, muestra cómo leer un DateTime una vez que lo tienes, explica qué ocurre cuando el análisis falla y señala las funciones relacionadas a las que recurrirás a continuación.
date_create() es simplemente un alias de new DateTime(). Ambas son intercambiables, así que usa la que mejore la legibilidad de tu código. Una razón habitual para preferir date_create() es que, a diferencia del constructor, devuelve false en lugar de lanzar una excepción ante una cadena de entrada inválida — lo que puede gestionarse sin un bloque try/catch.
La función date_create()
La función date_create() es una función integrada de PHP que crea un nuevo objeto DateTime. Acepta un parámetro opcional que especifica la fecha y la hora en un formato reconocido por la función strtotime(). Si no se pasa ningún parámetro, la función devuelve un objeto DateTime que representa la fecha y hora actuales.
Sintaxis
La sintaxis de la función date_create() es la siguiente:
Sintaxis de la función date_create() en PHP
date_create(string $datetime = "now", ?DateTimeZone $timezone = null): DateTime|falseEl primer parámetro, $time, especifica la fecha y hora para crear el objeto DateTime. Es opcional y tiene un valor predeterminado de "now". El segundo parámetro, $timezone, especifica la zona horaria a utilizar. También es opcional y tiene un valor predeterminado de NULL.
Parámetros
Veamos más de cerca los parámetros de la función date_create():
$datetime(opcional): Especifica la fecha y hora para crear el objetoDateTime. Puede ser cualquier cadena en un formato reconocido por la funciónstrtotime()— una fecha absoluta como"2022-12-31", una frase relativa como"next monday"o"+1 week", o un timestamp UNIX prefijado con@(por ejemplo"@1672531199"). El valor predeterminado"now"produce la fecha y hora actuales.$timezone(opcional): Un objectDateTimeZoneque especifica la zona horaria. Si se omite (o esnull), se usa la zona horaria predeterminada del script. Nota: este parámetro se ignora cuando$datetimees un timestamp UNIX (@...) o ya contiene un desplazamiento de zona horaria como"2022-12-31 23:59:59+02:00".
Valor de retorno
En caso de éxito, date_create() devuelve un objeto DateTime. En caso de fallo — por ejemplo cuando $datetime no puede analizarse — devuelve false en lugar de lanzar una excepción. Esto permite comprobar el resultado con una simple condición:
<?php
$date = date_create('not a real date');
if ($date === false) {
echo 'Could not parse the date.';
} else {
echo $date->format('Y-m-d');
}
// Output: Could not parse the date.Ejemplos
A continuación se muestran algunos ejemplos de cómo usar la función date_create():
Ejemplo de uso de la función date_create() en PHP
Uso de cadenas de fechas relativas
Dado que date_create() acepta todo lo que strtotime() entiende, puedes construir fechas relativas a "ahora" sin necesidad de ningún cálculo aritmético:
<?php
$today = date_create();
echo $today->format('l') . "\n"; // e.g. Output: Thursday
$nextWeek = date_create('+1 week');
echo $nextWeek->format('Y-m-d') . "\n"; // 7 days from today
$firstOfMonth = date_create('first day of this month');
echo $firstOfMonth->format('Y-m-d'); // e.g. 2023-03-01Trabajar con el resultado
Una vez que tienes un objeto DateTime, normalmente lo formateas para mostrarlo o lo comparas con otra fecha:
<?php
$start = date_create('2022-01-01');
$end = date_create('2022-12-31');
// Format the object as a string
echo $end->format('F j, Y') . "\n"; // Output: December 31, 2022
// Compare two DateTime objects directly
echo ($end > $start ? 'end is later' : 'start is later');
// Output: end is laterUsa date_format() (o el método ->format() mostrado arriba) para renderizar el object, y date_diff() para medir el intervalo entre dos objetos DateTime.
Funciones relacionadas
date_create_from_format()— crea unDateTimea partir de una cadena que usa un formato personalizado que especificas tú, en lugar de depender de la heurística destrtotime().date_format()— convierte un objetoDateTimeen una cadena formateada.date_add()— añade unDateIntervala unDateTime.strtotime()— el analizador que impulsa el argumento$datetime; devuelve un timestamp UNIX en lugar de un object.
Conclusión
La función date_create() es el punto de entrada procedimental para trabajar con los objetos DateTime de PHP. Acepta cadenas de fechas tanto absolutas como relativas, opcionalmente recibe una zona horaria y devuelve false en caso de fallo para que puedas validar la entrada sin gestión de excepciones. Una vez que tienes un DateTime, fórmatealo con ->format() y compara o resta objetos directamente. Para analizar entradas con formato no estándar, recurre a date_create_from_format(); para renderizar resultados, usa date_format().