W3docs

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|false

El 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 objeto DateTime. Puede ser cualquier cadena en un formato reconocido por la función strtotime() — 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 object DateTimeZone que especifica la zona horaria. Si se omite (o es null), se usa la zona horaria predeterminada del script. Nota: este parámetro se ignora cuando $datetime es 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

php— editable, runs on the server

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-01

Trabajar 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 later

Usa 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 un DateTime a partir de una cadena que usa un formato personalizado que especificas tú, en lugar de depender de la heurística de strtotime().
  • date_format() — convierte un objeto DateTime en una cadena formateada.
  • date_add() — añade un DateInterval a un DateTime.
  • 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().

Práctica

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