W3docs

time()

Aprende las funciones de fecha y hora en PHP: time(), date(), strtotime(), DateTimeImmutable, DateInterval y DateTimeZone con ejemplos ejecutables.

Introducción

PHP proporciona un conjunto robusto de funciones de fecha y hora esenciales para manejar datos temporales: registrar eventos, programar tareas, calcular duraciones y mostrar fechas localizadas. Esta guía cubre las herramientas más utilizadas — time(), date(), strtotime() y la moderna API orientada a objetos DateTimeImmutable / DateInterval / DateTimeZone — con su sintaxis y ejemplos prácticos ejecutables.

Algunos conceptos que conviene conocer primero:

  • Un timestamp Unix es un entero que cuenta los segundos transcurridos desde el 1 de enero de 1970 00:00:00 UTC (la "época"). Es independiente de la zona horaria, lo que lo hace ideal para almacenar y comparar momentos en el tiempo.
  • Una cadena de formato convierte un timestamp en una cadena legible por humanos. Cada carácter (Y, m, d, H, …) se corresponde con un componente de fecha.
  • PHP renderiza las fechas usando la zona horaria predeterminada del servidor. Configúrala explícitamente para evitar sorpresas:
<?php

date_default_timezone_set('UTC');

Configurar la zona horaria desde el principio hace que date() y time() sean deterministas en todos los servidores. Para una introducción más detallada, consulta PHP Date and Time.

Función date() de PHP

La función date() formatea un timestamp en una cadena legible. Acepta dos parámetros: format (requerido) y timestamp (opcional, por defecto es la hora actual). La cadena de formato utiliza caracteres específicos para representar los componentes de fecha.

Ejemplo de la función date() en PHP

php— editable, runs on the server

En este ejemplo, Y, m y d representan el año de cuatro dígitos, el mes de dos dígitos y el día de dos dígitos, respectivamente. La cadena de formato admite muchos otros caracteres para horas, minutos, segundos y más.

Caracteres de formato más comunes

CharSignificadoEjemplo
YAño de 4 dígitos2023
yAño de 2 dígitos23
mMes, con relleno de ceros03
nMes, sin relleno3
dDía del mes, con relleno de ceros03
jDía del mes, sin relleno3
HHora, formato 24h, con relleno de ceros14
gHora, formato 12h, sin relleno2
iMinutos09
sSegundos05
AAM/PMPM
lNombre del día (completo)Friday
DNombre del día (abreviado)Fri
FNombre del mes (completo)March
TAbreviatura de zona horariaUTC

Pasa un segundo argumento para formatear cualquier timestamp, no solo "ahora":

<?php

date_default_timezone_set('UTC');

echo date("l, F j, Y", 1678838400); // outputs "Wednesday, March 15, 2023"

Para escapar una letra literal y que no sea tratada como carácter de formato, coloca una barra invertida delante (p. ej. date('jS \o\f F')). Para más opciones de formato, consulta date() y date_format().

Función time() de PHP

La función time() devuelve el timestamp Unix actual, que cuenta el número de segundos transcurridos desde el 1 de enero de 1970, 00:00:00 UTC.

¿Cómo usar la función time() de PHP?

php— editable, runs on the server

El entero devuelto puede pasarse directamente a date() u otras funciones temporales para su posterior procesamiento. Como el timestamp es simplemente un número, puedes hacer operaciones aritméticas con él — por ejemplo, sumar 86400 (el número de segundos en un día) para obtener "esta hora mañana":

<?php

date_default_timezone_set('UTC');

$tomorrow = time() + 86400; // 24 * 60 * 60 seconds
echo date("Y-m-d H:i:s", $tomorrow);

Para operaciones con fechas que respeten meses, años bisiestos y el horario de verano, es preferible usar la API orientada a objetos que se muestra a continuación en lugar de aritmética en segundos.

Función strtotime() de PHP

La función strtotime() analiza una descripción de fecha y hora en texto en inglés y la convierte en un timestamp Unix. Acepta un único argumento de tipo string.

Ejemplo de la función strtotime() de PHP

php— editable, runs on the server

Esto convierte la cadena de fecha y hora especificada en su correspondiente valor de timestamp Unix. strtotime() también comprende expresiones relativas, lo cual es muy útil para programar tareas:

<?php

date_default_timezone_set('UTC');

echo date("Y-m-d", strtotime("next monday")), "\n";
echo date("Y-m-d", strtotime("2023-03-03 +1 week")); // outputs "2023-03-10"

Si la cadena no puede analizarse, strtotime() devuelve false, por lo que siempre debes comprobar el resultado antes de usarlo.

Clase DateInterval de PHP

La clase DateInterval representa una duración entre dos fechas u horas. El desarrollo moderno en PHP utiliza habitualmente DateTimeImmutable para calcular intervalos, ya que evita mutar el objeto de fecha original.

Ejemplo de la clase DateInterval de PHP

php— editable, runs on the server

Esto calcula la diferencia entre dos fechas. El especificador de formato %R%a muestra el signo (+ o -) seguido del número total de días.

También puedes construir un DateInterval directamente a partir de una cadena de duración ISO 8601 y sumarlo o restarlo a una fecha. P1W significa "un período de una semana":

<?php

$start = new DateTimeImmutable('2023-03-03');
$later = $start->add(new DateInterval('P1W'));
echo $later->format('Y-m-d'); // outputs "2023-03-10"

Dado que DateTimeImmutable nunca muta el original, $start sigue apuntando al 3 de marzo después de la llamada a add(). Consulta date_add(), date_sub() y date_diff() para los equivalentes procedurales.

Funciones de zona horaria en PHP

PHP gestiona las zonas horarias a través de la clase DateTimeZone y métodos relacionados. Estos permiten la conversión entre zonas y la visualización de offsets UTC.

Ejemplo de funciones de zona horaria en PHP

php— editable, runs on the server

Esto muestra la fecha y hora en la zona especificada, junto con su abreviatura (p. ej., EST).

Para convertir un momento existente de una zona a otra, usa setTimezone(). El instante en el tiempo permanece igual — solo cambia su representación:

<?php

$ny = new DateTimeImmutable('2023-03-03 12:00:00', new DateTimeZone('America/New_York'));
$utc = $ny->setTimezone(new DateTimeZone('UTC'));
echo $utc->format('Y-m-d H:i:s T'); // outputs "2023-03-03 17:00:00 UTC"

Nueva York está cinco horas por detrás de UTC en marzo, por lo que el mediodía en Nueva York son las 17:00 UTC. Para cambiar la zona horaria usada por las funciones procedurales date() y time(), llama a date_default_timezone_set().

API procedural vs. orientada a objetos: ¿cuál usar?

PHP ofrece dos estilos para trabajar con fechas:

  • Funciones procedurales (time(), date(), strtotime(), getdate(), gmdate()) son concisas y excelentes para formateo rápido o conversiones puntuales.
  • La API orientada a objetos (DateTimeImmutable, DateInterval, DateTimeZone) es la opción recomendada para todo lo que involucre zonas horarias, duraciones o aritmética de fechas, porque es explícita, inmutable y evita los problemas del cálculo en segundos enteros a través de los límites del horario de verano.

Una buena regla general: utiliza DateTimeImmutable siempre que una fecha cruce una zona horaria o necesite ser sumada o restada.

Conclusión

Dominar las funciones de fecha y hora de PHP permite a los desarrolladores manejar datos temporales con precisión en diferentes entornos y zonas horarias. Comienza con time() y date() para casos sencillos, apóyate en strtotime() para analizar entradas en lenguaje natural, y usa la familia DateTimeImmutable para operaciones matemáticas con fechas fiables.

Práctica

Práctica
¿Cuáles son las funcionalidades de la función 'date()' en PHP?
¿Cuáles son las funcionalidades de la función 'date()' en PHP?
Was this page helpful?