Trabajo con fechas y horas en PHP: de la A a la Z
Trabajar con fechas y horas es una de las tareas más comunes en el desarrollo web. Ya sea para mostrar la fecha de publicación, calcular la edad de un usuario, registrar eventos o crear un calendario, PHP proporciona un conjunto de herramientas potente y flexible. En este artículo, analizaremos todos los aspectos: desde funciones simples hasta el enfoque orientado a objetos con la clase DateTime, incluyendo zonas horarias y ejemplos prácticos.
Funciones básicas: date() y time()
El conjunto básico de funciones para trabajar con fechas incluye time() y date(). La función time() devuelve la marca de tiempo Unix actual (el número de segundos desde el 1 de enero de 1970). La función date() formatea esta marca en un formato legible para humanos.
Obtener la fecha y hora actuales
La forma más sencilla de mostrar la fecha actual:
<?phpecho date('Y-m-d H:i:s'); // 2025-04-10 15:30:45?>Formateo con date()
La función date() acepta dos parámetros: el formato y una marca de tiempo opcional. Los caracteres de formato más populares son:
d— día del mes (01–31)m— mes (01–12)Y— año en formato de 4 dígitosH— horas en formato de 24 horas (00–23)i— minutos (00–59)s— segundos (00–59)
Ejemplo de salida con texto en español:
<?phpecho 'Hoy es ' . date('d.m.Y') . ', hora ' . date('H:i');// Hoy es 10.04.2025, hora 15:30?>Clase DateTime: enfoque orientado a objetos
Para operaciones complejas, se recomienda usar la clase DateTime. Es intuitiva, admite zonas horarias y simplifica la manipulación de fechas.
Creación de un objeto DateTime
Se puede crear un objeto de diferentes maneras:
<?php// Fecha y hora actuales$now = new DateTime();echo $now->format('Y-m-d H:i:s'); // 2025-04-10 15:30:45
// Fecha específica$date = new DateTime('2025-12-31 23:59:59');echo $date->format('d.m.Y'); // 31.12.2025
// Usando un formato relativo$nextWeek = new DateTime('+1 week');echo $nextWeek->format('Y-m-d');?>Modificar la fecha: modify()
El método modify() permite agregar o restar intervalos fácilmente:
<?php$date = new DateTime('2025-04-10');$date->modify('+10 days');echo $date->format('d.m.Y'); // 20.04.2025
$date->modify('-1 month');echo $date->format('d.m.Y'); // 20.03.2025?>Trabajo con zonas horarias
Ignorar las zonas horarias es un error común. PHP ofrece dos formas de gestionarlas: globalmente con date_default_timezone_set() y localmente con el objeto DateTimeZone.
Configuración global
Establece la zona horaria al inicio del script:
<?phpdate_default_timezone_set('Europe/Madrid');echo date('H:i'); // Hora en Madrid?>Configuración local para DateTime
Cada objeto DateTime puede tener su propia zona horaria:
<?php$timezone = new DateTimeZone('America/Mexico_City');$date = new DateTime('now', $timezone);echo $date->format('H:i'); // Hora en Ciudad de México
// Cambiar la zona de un objeto existente$date->setTimezone(new DateTimeZone('Europe/Madrid'));echo $date->format('H:i'); // Hora convertida?>Diferencia entre fechas: DateInterval
La clase DateInterval y el método diff() permiten calcular la diferencia entre dos fechas.
Calcular la diferencia
<?php$start = new DateTime('2025-01-01');$end = new DateTime('2025-12-31');$interval = $start->diff($end);
echo $interval->days; // 364 (cantidad