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
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
| Char | Significado | Ejemplo |
|---|---|---|
Y | Año de 4 dígitos | 2023 |
y | Año de 2 dígitos | 23 |
m | Mes, con relleno de ceros | 03 |
n | Mes, sin relleno | 3 |
d | Día del mes, con relleno de ceros | 03 |
j | Día del mes, sin relleno | 3 |
H | Hora, formato 24h, con relleno de ceros | 14 |
g | Hora, formato 12h, sin relleno | 2 |
i | Minutos | 09 |
s | Segundos | 05 |
A | AM/PM | PM |
l | Nombre del día (completo) | Friday |
D | Nombre del día (abreviado) | Fri |
F | Nombre del mes (completo) | March |
T | Abreviatura de zona horaria | UTC |
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?
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
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
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
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.