Un par de cosas a tener en cuenta.
tienda todos datetimes de eventos en tiempo UTC
Sí, no hay forma de evitar esto.
Averiguar cuáles son las zonas horarias ...
... de todos los usuarios en el sistema. Puede usar el siguiente script de detección: http://site.pageloom.com/automatic-timezone-detection-with-javascript. Te dará una clave de zona horaria como, por ejemplo, "América/Phoenix".
En su caso, debe almacenar la zona horaria junto con el evento, ya que un usuario puede cambiar de zona horaria, pero el evento siempre habrá ocurrido en uno específico. (Argh)
Elija su mecanismo de visualización de
Si desea localizar sus fechas de los eventos con Javascript, hay una biblioteca ingeniosa para eso también (que puede utilizar las teclas que se suministran con el guión anterior). Aquí: https://github.com/mde/timezone-js.
con esa biblioteca puede por ejemplo hacer esto:
var dt = new timezoneJS.Date(UTC_TIMESTAMP, 'America/New_York');
o
var dt = new timezoneJS.Date(2006, 9, 29, 1, 59, 'America/Los_Angeles');
donde UTC_TIMESTAMP por ejemplo, podría ser 1193855400000
. Y America/New_York
es la zona horaria que ha detectado cuando se realizó el evento.
El objeto dt
que obtienes de esto se comportará como un objeto normal de JavaScript Date
. Pero se "corregirá" automáticamente a la zona horaria que haya especificado (incluido el horario de verano).
Si lo desea, puede hacer todas las correcciones en el backend, antes de publicar la página. Como no sé qué lenguaje de programación está utilizando allí, no puedo darle ningún consejo inmediato. Pero básicamente sigue la misma lógica, si conoce la zona horaria y la hora de fecha UTC -> puede localizar la fecha y hora. Todos los lenguajes de programación tienen bibliotecas para eso.
Agregar un día de hecho implica la zona horaria. No todos los días son 24 horas de duración. Dependiendo de la zona horaria, las reglas de ahorro de luz natural y la fecha particular en cuestión, un día calendario puede tener 23, 24 o 25 horas de duración (u otros valores extraños si se habla de zonas horarias históricas). Por lo tanto, no siempre es una cuestión simple de agregar 86400000. –
Quizás la pregunta no esté especificada. Si son las 2:30 de la mañana, el día antes de que la zona horaria avance, ¿qué significa "agregar un día"? – Malvolio
Exactamente. Si quiere decir "agregar 24 horas", entonces está bien. Pero la mayoría de las personas piensa que estas transiciones son invisibles porque generalmente están dormidas cuando ocurren. Entonces, si le preguntas a un lego a qué hora será 1 día a partir de las 2:30 AM, esperarán las 2:30 AM, no la posible 1:30 AM o 3:30 AM. La gente tiende a pensar en términos de calendarios, incluso cuando esos calendarios son furtivos. :) –