2012-10-03 27 views
5

Noté algo raro con zonas horarias y el objeto Javascript Date.¿Hay alguna forma de representar el 21 de octubre de 2012 en un objeto `Fecha` de Javascript?

Tratando esta en una máquina Linux:

$ TZ='America/Sao_Paulo' js 
js> new Date(2012, 9, 21, 0, 0, 0).toString() 
"Sat Oct 20 2012 23:00:00 GMT-0300 (BRST)" 

me pareció que era imposible conseguir un objeto que representa Del 21 de octubre de 2012. Cada attemps para obtener una Date ese día entre las 00:00 y las 01:00 da como resultado una fecha el día anterior entre las 11:00 p.m. y las 00:00 p.m.

(usuario de Windows puede cambiar su zona horaria a Brasilia/GMT-03 para experimentar el mismo comportamiento)

Adición de una hora (o un día) a de ello, tal fecha objeto en volver la misma fecha.

Supongo que tiene que ver con el horario de verano que se produce en esa fecha específica en Brasil, sin embargo, no sé cómo lidiar con eso.

que tienen un bucle que itera sobre los días del mes (para una aplicación de calendario) y es obvio que los bucles para siempre en ese caso, al alcanzar el 20 de octubre de 2012.

Tiene que haber algo que estoy haciendo mal, pero no sé cómo manejar un caso así, ya que supongo que también podría suceder en otras zonas horarias.

¿Cuál es la forma recomendada de tratar con Date en Javascript para asegurar que esos problemas relacionados con la zona horaria/horario de verano no ocurran?

Respuesta

0

Este es un comportamiento absolutamente correcto. Debido a la medianoche DST simplemente no existe en la hora local en Brasil el 21 de octubre. Si solo necesita construir un calendario, puede usar new Date(2012, 9, 21, 0, 0, 0).toUTCString() en lugar de new Date(2012, 9, 21, 0, 0, 0).toString() y otros UTC methods.

Por ejemplo, para crear una fecha UTC puede usar new Date(Date.UTC(2012, 9, 21, 0, 0, 0));.

+0

Gracias por su respuesta. Sin embargo, mi problema no es obtener la representación de cadena de la fecha, sino obtener un objeto válido que represente este momento exacto. – ereOn

+1

Luego solo use el método UTC: 'new Date (Date.UTC (2012, 9, 21, 0, 0, 0));' – bjornd

+0

Eso funciona mejor. ¿Podría por favor editar su respuesta para que sea más obvia cuál es la verdadera solución? Estaré encantado de aceptarlo entonces :) – ereOn

Cuestiones relacionadas