2011-09-05 14 views
6

Estoy tratando de generar una serie de veces en intervalos de hora (en la hora) dentro de Javascript (por lo que dentro de un navegador web como Firefox). Esta serie de veces se superpondrá al día corto (perder una hora en primavera) y al largo día (ganar una hora en otoño). La salida que estoy buscando está en hora local, es decir, con la zona horaria y los desplazamientos DST aplicados. Así, por ejemplo, en el Reino Unido tenemos una hora que falta 01:00-01:59 en el día corto de tal manera que la salida sería:Necesito mostrar las horas locales en las transiciones DST utilizando Javascript Fecha Objeto

00:00, 02:00, 03:00

Y en el largo día tenemos una hora extra de 01:00 a 02:00 para que la salida sea:

00:00, 01:00, 01:00, 02:00, 03:00

Ya he encontrado estas dos respuestas brillantes que destacan algunos escollos y abordan parte de mi problema:

Pero la verdadera dificultad está en hacer javascript conscientes de que falta y extra de esta hora (por así decirlo) como se identifica en la segunda pregunta se mencionó anteriormente.

Creo que una posible solución sería operar en UTC (también conocido como GMT) y simplemente hacer una conversión a la hora local, pero estoy luchando para ver cómo podría hacerlo.

¿Alguien tiene alguna idea sobre cómo lograr lo que estoy buscando?

Respuesta

3

Si usted tiene una zona horaria fija, el siguiente código JavaScript parece funcionar (probado en la última versión de Chrome y Firefox 6):

// set the date to 11/04/2012 at 00:00 UTC 
var date = new Date(1331424000000); 
for(var i = 1; i <= 12; i++) { 
    $('.data-dston').append(' ' + date.getHours() + ':00, '); 
    date = new Date(date.getTime() + 3600000) 
} 

// set the date to 04/11/2012 at 00:00 UTC 
var date = new Date(1351987200000); 
for(var i = 1; i <= 12; i++) { 
    $('.data-dstoff').append(' ' + date.getHours() + ':00, '); 
    date = new Date(date.getTime() + 3600000) 
} 

Aquí hay una jsFiddle: http://jsfiddle.net/Vsd2A/3/ para ver el código en acción!

+0

Gracias Krtek, he tomado su ejemplo y lo he adaptado como se muestra en mi respuesta. –

1

Adaptar lo Krtek ha llegado con (por mi zona horaria - Reino Unido) Ahora tengo el siguiente:

// set the date to 27/03/2011 at 00:00 UTC 
var date = new Date('27 Mar 2011 00:00'); 
for(var i = 1; i <= 12; i++) 
{ 
    $('.data-dston').append(' ' + date.getHours() + ':00, '); 
    date.setTime(date.getTime() + 3600000); 
} 

// set the date to 30/10/2011 at 00:00 UTC 
var date = new Date('30 Oct 2011 00:00'); 
for(var i = 1; i <= 12; i++) 
{ 
    $('.data-dstoff').append(' ' + date.getHours() + ':00, '); 
    date.setTime(date.getTime() + 3600000) 
} 

que tiene la ventaja de no tener que construir un nuevo objeto en cada iteración.

Cuestiones relacionadas