php - santiago - laravel timezone
¿La mejor forma de administrar las fechas de almacenamiento/visualización en diferentes zonas horarias en PHP? (2)
He estado leyendo sobre este tema durante las últimas horas, y creo que lo he manejado, pero me gustaría obtener alguna confirmación.
Situación
Quiero que un usuario de, por ejemplo, California, pueda publicar un comentario que se almacenará 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 al inicio de la aplicación para que todas las funciones de fecha utilicen la zona horaria UTC:
date_default_timezone_set(''UTC'');
-
$Date = new DateTime();
para obtener un objeto DateTime con la fecha y hora actual en UTC. - Use
$Date->format()
para obtener el valor para insertar en la columna de tipo de fecha y hora en MySQL.
Viendo
- Obtenga la información de la zona horaria del usuario desde JavaScript y guárdela en una cookie.
- Ejecute una consulta MySQL SELECT para recuperar el valor de la columna datetime.
-
$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. - Pantalla usando
$Date->format();
¿Es eso la esencia de lo que se tiene que hacer? ¿Me estoy perdiendo una mejor solución? ¡Gracias por tu ayuda!
Tú haciéndolo todos los derechos. Almacene todas las fechas en UTC (GMT + 0), recupérelas como tales de la base de datos y aplique el desplazamiento del usuario.
Esencialmente, lo tienes todo cubierto de principio a fin, no hay nada que agregar, no creo que puedas optimizarlo más allá de lo que ya estás haciendo.
Se puede hacer aún más simple. Como está utilizando JavaScript, ¿por qué no usar JavaScript para ajustar también la zona horaria del cliente?
- Almacenar todos los tiempos en el servidor como UTC
- Servirlos al cliente como UTC
- El cliente usa JavaScript para ajustar la hora a la zona horaria local
Esto no solo simplifica las cosas, sino que también soluciona un problema con su modelo. Si registré mi cuenta en Nueva York pero viajo a Australia, quiero ver los horarios según la zona horaria de Australia. De hecho, usar JavaScript que usa puede ajustar fácilmente la configuración, haciendo que el diseño sea aún más dinámico. En segundo lugar, puede evitar la sobrecarga de almacenar la zona horaria del usuario.
Dicho esto, si desea que su diseño se degrade a los navegadores que no son JavaScript, entonces es mejor que adopte un enfoque completo del lado del servidor basándose en las cookies HTTP (en lugar de confiar en que JS obtenga las cookies).