Cómo obtener la fecha y hora actual en PHP: mejores prácticas en 2025
\n\nCada desarrollador PHP, desde principiante hasta senior, se ha preguntado al menos una vez: "How do I get the current date and time in PHP?". Esta pregunta en Stack Overflow acumula miles de visitas y sigue siendo relevante. En 2025, cuando PHP mantiene firmemente su posición en el desarrollo web, saber trabajar correctamente con fechas y horas no es solo una competencia básica, sino una necesidad. Registro de logs, caché, informes, integración con APIs: todo requiere una hora precisa. En este artículo, no solo repasaremos las funciones clásicas, sino también las mejores prácticas modernas para que tu código sea limpio, confiable y preparado para cualquier zona horaria.
\n\nLo clásico: date() y time()
\n\nLa forma más simple y rápida de obtener la fecha y hora actual en PHP es la función date(). Acepta una cadena de formato y devuelve la fecha formateada según la hora actual del servidor o un timestamp específico.
<?php\necho date('Y-m-d H:i:s'); // 2025-04-10 14:30:00\necho date('d.m.Y'); // 10.04.2025\necho date('r'); // Thu, 10 Apr 2025 14:30:00 +0300\n?>\n\n¿Y si solo necesitas el timestamp Unix (segundos desde el 1 de enero de 1970)? Usa time():
<?php\n$timestamp = time();\necho $timestamp; // 1744273800 (ejemplo)\necho date('Y-m-d H:i:s', $timestamp);\n?>\n\nImportante: date() usa la zona horaria configurada en php.ini mediante la directiva date.timezone, o la establecida con la función date_default_timezone_set(). En 2025, esto sigue siendo una opción funcional para scripts simples, pero para proyectos serios existen herramientas más flexibles.
Enfoque moderno: la clase DateTime
\n\nDesde PHP 5.2 (y eso fue hace tiempo), el lenguaje incluye una forma orientada a objetos para trabajar con fechas: la clase DateTime. Se ha convertido en el estándar de facto para la mayoría de frameworks y CMS. ¿Por qué? Porque es más flexible, legible y seguro.
<?php\n$now = new DateTime();\necho $now->format('Y-m-d H:i:s'); // 2025-04-10 14:30:00\n\n// Especificando la zona horaria\n$now = new DateTime('now', new DateTimeZone('Europe/Madrid'));\necho $now->format('Y-m-d H:i:s'); // 2025-04-10 14:30:00 (CEST)\n?>\n\nDateTime permite manipular fechas fácilmente: sumar días, restar meses, comparar objetos. Por ejemplo:
<?php\n$today = new DateTime();\n$nextWeek = (new DateTime())->modify('+7 days');\n$diff = $nextWeek->diff($today);\necho $diff->days; // 7\n?>\n\nEste es el enfoque recomendado en las mejores prácticas de PHP para 2025. Es inmutable (si no modificas el objeto directamente) e intuitivo.
\n\nVariante inmutable: DateTimeImmutable
\n\nSi trabajas en un proyecto serio donde la previsibilidad es clave, usa DateTimeImmutable. A diferencia de DateTime, sus métodos no modifican el objeto original, sino que devuelven uno nuevo. Esto evita mutaciones accidentales del estado.
<?php\n$date = new DateTimeImmutable('2025-04-10');\n$newDate = $date->modify('+1 month');\necho $date->format('Y-m-d'); // 2025-04-10 (sin cambios)\necho $newDate->format('Y-m-d'); // 2025-05-10\n?>\n\nEn 2025, esto se considera una buena práctica: usa DateTimeImmutable siempre que sea posible.
Zonas horarias: configuración y conversión
\n\nEl error con la zona horaria es uno de los problemas más comunes. Imagina: el servidor en EE. UU., el usuario en España, y tú mostrando la hora en UTC. Un clásico fracaso.
\n\nPara evitarlo, especifica siempre la zona horaria explícitamente. La forma más confiable es configurarla al inicio del script con date_default_timezone_set():