Fecha y hora en PHP en 2025: no repitas estos 5 errores

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

El tiempo no espera: por qué en PHP las fechas son complicadas (y cómo solucionarlo)

\n\n

Imagina: estás escribiendo un blog, una tienda en línea o un panel de usuario. Y de repente te das cuenta — necesitas mostrarle al usuario cuándo se publicó un artículo, se realizó un pedido o se envió un mensaje. Parecería, ¿qué podría ser más fácil? Tomas la función date() — y listo.

\n\n

Pero el diablo, como siempre, está en los detalles. En 2025, los desarrolladores de PHP siguen cometiendo los mismos errores: confunden zonas horarias, olvidan la inmutabilidad de los objetos, usan funciones obsoletas. Y luego se sorprenden de que la hora en el sitio «salte» y las pruebas fallen.

\n\n

En este artículo analizaremos las mejores prácticas para trabajar con fecha y hora en PHP — desde soluciones simples hasta técnicas profesionales. Aprenderás cómo obtener la fecha actual, cómo trabajar con zonas horarias y cómo no dispararte en el pie al trabajar con marcas de tiempo.

\n\n

1. La forma más simple: la función date()

\n\n

Empecemos con lo clásico. La función date() es con lo que comienzan el 90% de los principiantes. Acepta dos parámetros: el formato de salida y (opcionalmente) un timestamp. Si no se especifica el timestamp, se usa la hora actual del servidor.

\n\n
echo date('Y-m-d H:i:s');\n// Salida: 2025-04-08 14:35:12
\n\n

Estos son los formatos más populares:

\n
    \n
  • Y — año (4 dígitos)
  • \n
  • m — mes (01–12)
  • \n
  • d — día del mes (01–31)
  • \n
  • H — horas en formato de 24 horas
  • \n
  • i — minutos
  • \n
  • s — segundos
  • \n
\n\n

Problema: date() depende de la configuración date.timezone en php.ini. Si no has establecido la zona horaria, PHP usará la hora del sistema del servidor. Y el servidor puede estar en otra zona horaria — y entonces tus usuarios verán la hora incorrecta.

\n\n

2. Enfoque profesional: la clase DateTime

\n\n

A partir de PHP 5.2, tenemos la clase DateTime. Es una forma orientada a objetos de trabajar con fechas, mucho más flexible y segura que las funciones date() y time().

\n\n
$now = new DateTime();\necho $now->format('Y-m-d H:i:s');\n// Salida: 2025-04-08 14:35:12
\n\n

Ventajas de DateTime:

\n
    \n
  • Se puede establecer fácilmente la zona horaria a través del constructor
  • \n
  • Soporta modificación de fechas (agregar días, meses)
  • \n
  • Puede comparar fechas entre sí
  • \n
  • Trabaja con intervalos
  • \n
\n\n

Ejemplo con zona horaria:

\n\n
$now = new DateTime('now', new DateTimeZone('Europe/Moscow'));\necho $now->format('Y-m-d H:i:s');\n// Salida: 2025-04-08 17:35:12 (MSK, UTC+3)
\n\n

2.1. DateTimeImmutable — tu nuevo mejor amigo

\n\n

En PHP 5.5 apareció DateTimeImmutable. Su principal diferencia con DateTime normal: no se modifica a sí mismo. En su lugar, cada método (por ejemplo, modify() o add()) devuelve un nuevo objeto.

\n\n
$date = new DateTimeImmutable();\n$modified = $date->modify('+1 day');\n\necho $date->format('Y-m-d');      // 2025-04-08 (¡no cambió!)\necho $modified->format('Y-m-d');  // 2025-04-09 (nuevo objeto)
\n\n

¿Por qué es importante? Porque DateTime normal es un objeto por referencia. Si lo pasas a una función y allí lo modificas, el original también se modifica. Con Immutable no existe ese problema. En 2025, esto se considera el estándar de facto para proyectos serios.

\n\n

3. Cómo obtener el timestamp: time() vs DateTime

\n\n

A veces no necesitas una fecha, sino un Unix timestamp — la cantidad de segundos desde el 1 de enero de 1970. PHP ofrece dos caminos:

\n\n
// Forma antigua\necho time();  // 1744112112\n\n// Forma nueva\necho (new DateTime())->getTimestamp();  // 1744112112
\n\n

Para tareas simples, time() es suficiente

Blogs

Book Recommendations