Trabajo con fechas y horas en PHP: desde lo básico hasta técnicas avanzadas
Trabajar con fechas y horas es una de las tareas más comunes en el desarrollo web. Ya sea para mostrar la fecha actual, calcular la diferencia entre eventos o guardar marcas de tiempo en la base de datos, PHP proporciona un conjunto de herramientas potente y flexible. En este artículo, analizaremos en detalle las funciones principales, clases y mejores prácticas para trabajar con fechas y horas en PHP.
El material será útil tanto para principiantes que recién comienzan a aprender PHP como para desarrolladores experimentados que desean sistematizar sus conocimientos.
1. Funciones básicas: date(), time() y mktime()
Empecemos por lo fundamental. PHP ofrece varias funciones integradas para trabajar con fechas. Las más populares son date(), time() y mktime().
Función time()
La función time() devuelve la marca de tiempo Unix actual (timestamp) — la cantidad de segundos transcurridos desde el 1 de enero de 1970 a las 00:00:00 UTC. Este es el valor base del que parten muchas operaciones.
echo time(); // Mostrará algo como 1698765432Función date()
La función date() formatea la fecha y hora local. El primer parámetro es una cadena de formato, el segundo (opcional) es un timestamp. Si no se especifica el segundo parámetro, se usa la hora actual.
// Formatos básicosecho date("Y-m-d"); // 2023-10-31echo date("H:i:s"); // 14:30:00echo date("d.m.Y H:i"); // 31.10.2023 14:30echo date("l, j F Y"); // Tuesday, 31 October 2023
// Timestamp personalizado$timestamp = mktime(12, 0, 0, 1, 1, 2024);echo date("Y-m-d H:i:s", $timestamp); // 2024-01-01 12:00:00Símbolos de formato populares:
d— día del mes (01-31)m— mes (01-12)Y— año en formato de 4 dígitosH— horas (00-23)i— minutos (00-59)s— segundos (00-59)
Función mktime()
mktime() crea un timestamp basado en los parámetros proporcionados (horas, minutos, segundos, mes, día, año). Esto es útil para obtener la marca de tiempo de una fecha específica.
// Creamos un timestamp para el 25 de diciembre de 2023, a las 10:30:00$christmas = mktime(10, 30, 0, 12, 25, 2023);echo date("d.m.Y H:i:s", $christmas); // 25.12.2023 10:30:002. Enfoque orientado a objetos: clase DateTime
Aunque las funciones date() y time() son simples, tienen limitaciones. Para operaciones más complejas (comparación de fechas, trabajo con zonas horarias, suma/resta de intervalos) es mejor usar la clase DateTime.
Creación de objetos DateTime
// Hora actual$now = new DateTime();echo $now->format("Y-m-d H:i:s"); // 2023-10-31 14:30:00
// Fecha específica$date = new DateTime("2024-03-15 08:00:00");echo $date->format("d.m.Y"); // 15.03.2024
// Formatos relativos$nextWeek = new DateTime("+1 week");echo $nextWeek->format("Y-m-d");
$lastMonth = new DateTime("first day of last month");echo $lastMonth->format("Y-m-d");Trabajo con zonas horarias
Una de las principales ventajas de DateTime es el soporte de zonas horarias.
// Especificamos la zona horaria al crear$moscow = new DateTime("now", new DateTimeZone("Europe/Moscow"));echo $moscow->format("Y-m-d H:i:s"); // Hora de Moscú
// Cambio de zona horaria$newYork = new DateTime("now", new DateTimeZone("America/New_York"));echo $newYork->format("Y-m-d H:i:s"); // Hora de Nueva York
// Lista de zonas disponibles: https://www.php.net/manual/ru/timezones.phpComparación de fechas
$date1 = new DateTime("2024-01-01");$date2 = new DateTime("2024-12-31");
if ($date1 < $date2) { echo "La primera fecha es anterior a la segunda";}
// Dif