2011-06-15 24 views
5

Necesito escribir una aplicación web que muestre eventos de personas en diferentes configuraciones regionales. Casi he terminado, pero hay 2 problemas con la fecha:Fecha de Javascript objeto en diferente configuración regional y zona horaria

  • utilizando las fechas de JavaScript objeto, la fecha depende de la configuración del equipo del usuario y no es fiable
  • si hay un evento en un lugar con dfferent respecto zona horaria posición actual del usuario, tengo que imprimirlo dentro de (). ¿Es posible en javascript crear un objeto de fecha con una configuración de zona horaria y luz del día determinada?

También encuentro alguna solución, tales como servicios web jsdate y fecha, pero no superan el problema de tener un objeto JavaScript con la configuración de zona horaria y horario de funcionamiento correcto (por fecha como la adición de día, etc.)

Respuesta

0

Una posibilidad podría ser utilizar la fecha y hora UTC para todo. De esa forma, no hay nada que convertir.

Otra es hacer que su servidor proporcione la hora y la fecha. Entonces no tiene que depender del usuario para tenerlo configurado correctamente, y no tiene que preocuparse por dónde está la zona horaria de su usuario.

2

Falta el punto de un objeto Date. Representa un punto particular en el tiempo. Mientras hablo, es 1308150623182 en todo el mundo. La zona horaria solo entra en juego cuando desea mostrar el tiempo para el usuario. Una operación como "agregar un día" no implica el huso horario en absoluto.

+2

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. –

+1

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

+2

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. :) –

0

Uso getUTCDate(), getUTCHours(), ... en lugar de getDate(), getHours(), ... getTimetoneOffset() podría ser útil, también.

6

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.

Cuestiones relacionadas