Hay una mala práctica muy común en el mundo del desarrollo que consiste en usar las herramientas tal cual vienen «de fábrica», por así llamarle.
¿A qué me refiero?
Las plataformas de desarrollo tienen determinadas configuraciones iniciales con las que son empaquetadas. Algunas de estas determinan el uso de memoria, acceso a archivos o directorios, configuraciones para el tratamiento de horas y cadenas, entre otros. Estas configuraciones a veces se realizan en archivos de configuración de la plataforma (algún archivo ini, conf) y/o mediante variables de entorno JAVA_HOME por ejemplo.
Una de estas configuraciones que se dan por sentado es la zona horaria, o TIME ZONE, y PHP es uno de los clásicos cuya configuración no se revisa y se deja la que viene default. PHP cuenta con varias funciones para hacer tratamiento de horas y fechas, pero para que estas entreguen un resultado correcto, debe estar correctamente configurado.
¿Cómo sabes si está bien configurado PHP para tu zona horaria?
Puedes consultar el archivo de configuración, en la entrada:
date.timezone
También la puedes consultar desde linea de comando ejecutando el intérprete de PHP:
Windows
php -i | find /I "timezone"

Linux
php -i | grep timezone

Vemos en estos dos ejemplos que el caso de Windows, tiene la zona horaria de la Cd de México, y la consola linux, tiene UTC.
¿Por qué es importante esto?
Primordialmente para que todas tus operaciones que contemplen el uso de fechas y horas sean correctas con respecto a tu zona horaria.
Si tu zona horaria es incorrecta, y pides la fecha del sistema, PHP te la entregará convertida a dicha zona horaria, pidamos la feha y hora actual en ambas consolas y comparemos:
| Windows | Linux |
![]() | ![]() |
Vemos que la fecha coincide, pero no así la hora. En el caso de Linux, con UTC, la hora es 22:50 (10:50pm) del día 21. Con esta configuración, conforme avance el horario y Windows siga mostrando el 21 de Dic pasando las 7pm, la consola Linux mostrará ya el 22 de Diciembre pasada la media noche.
El trabajar con una zona horaria correcta te permitirá hacer cálculos con respecto a la misma, piensa por ejemplo en el caso de México, que cuenta con 4 zonas horarias cuyas equivalencias con UTC se aprecian en la imagen siguiente:

Imagina que tienes una aplicación web que permite otorgar el servicio de 8am a 8pm de lunes a viernes. Si no tomas en consideración cálculos con base en zona horaria, y usas la de la Cd de México, estarás restando 1 hora de servicio a la gente de Quintana Roo, ya que cuando allá son 8am en el centro son 7am, y no habría servicio.
Lo mismo pasaría para los estados que aparecen en UTC-7, cuando en el centro sean las 8pm, para esos estados aún será 7pm, pero ya no se les prestaría el servicio.
Hay un aspecto más que debemos tomar en cuenta: el cambio de horario; si bien, con el reciente cambio en México este dejará de aplicarse, no así en otros países. Las herramientas de desarrollo sí consideran esta modalidad, luego entonces, si estás en un país donde el cambio de horario aplica, ajusta tu configuración para que PHP (o la plataforma de tu elección) haga correctamente estos ajustes, de otra forma, tendrás que hacer todos los cálculos a mano.
Pero, ¿Sería más conveniente hacer cálculos con UTC y así dejar todo estandarizado?
Sí y no, depende qué harás. La mayoría de la gente no está acostumbrada a ver fechas y horas en UTC, y si además no les avisas que el horario está expresado con esa zona horaria, generarás confusión y quejas, sobretodo estas últimas.
Si vas a mostrar fechas y horarios al usuario, y vas a darle respuesta a cálculos con base en ellos, usa la zona horaria correspondiente; si es para temas de log, quizás podrías usar UTC (u otro).
Afortunadamente, php te permite cambiar en tiempo de ejecución la zona horaria (extra a tenerla definida de forma general), veamos un ejemplo donde cambiamos la zona horaria a Sydney, Australia:

Vemos que a las 5pm de la hora de la Cd. de México, en Sydney, Australia ya son las 10am del día siguiente. Y todo esto se hace automáticamente, si la configuración es correcta.
No dejes para después estas configuraciones, te ahorrarán dolores de cabeza.
En esta liga encontrarás las cadenas que identifican las zonas horarias de PHP:


Deja un comentario