He estado leyendo sobre este tema durante las últimas horas, y creo que lo he manejado, pero me gustaría obtener alguna confirmación.¿La mejor manera de administrar las fechas de almacenamiento/visualización en diferentes zonas horarias en PHP?
Situación
Quiero un usuario en, digamos, California, para ser capaz de poner un comentario que serán almacenados en MySQL. Luego deseo que un usuario de, digamos, Texas, pueda ver el comentario con la fecha de publicación ajustada a su zona horaria.
Solución propuesta
Almacenamiento
- ejecute lo siguiente en el inicio de la aplicación, de modo que todas las funciones fechas utiliza zona UTC:
date_default_timezone_set('UTC');
$Date = new DateTime();
para obtener un objeto DateTime con la fecha y hora actuales en UTC.- Utilice
$Date->format()
para obtener el valor para insertar en la columna de tipo de fecha y hora en MySQL.
Viendo
- Obtener información de la zona horaria del usuario desde JavaScript y lo almacena en una cookie.
- Ejecute una consulta MySQL SELECT para recuperar el valor de la columna de fecha y hora.
$Date = new DateTime($row['time']);
para instanciar un objeto DateTime con la hora UTC almacenada.$Date->setTimezone(new DateTimeZone($userTimezone));
para ajustar la hora UTC a la zona horaria del usuario.- visualización utilizando
$Date->format();
Es que la esencia de lo que se tiene que hacer? ¿Me estoy perdiendo una mejor solución? ¡Gracias por tu ayuda!
Creo que voy a configurar la cookie de zona horaria en el inicio de sesión del usuario, por lo que debería actualizarse si viaja a Australia e inicia sesión desde allí. ¿Está sugiriendo que se ejecute JavaScript en la carga de la página que busca los tiempos en, por ejemplo, y los convierte todos sobre la marcha? –
La única forma de acceder al reloj del usuario es a través de JS o geo-ip. Último es complejo y poco confiable. Si va a utilizar JS en cualquier caso, hacerlo al momento de iniciar sesión requiere más mantenimiento (seguimiento del lado del servidor). Hacerlo sobre la marcha tiene más sentido aquí. – aleemb
Gracias. A medida que lo investigo más, estoy empezando a estar de acuerdo contigo. –