2011-09-05 4 views
6

J'essaie d'afficher une série de fois par heure (sur l'heure) dans JavaScript (donc dans un navigateur Web tel que Firefox). Cette série de temps chevauchera la courte journée (perdre une heure au printemps) et la longue journée (gagner une heure en automne). La sortie que je recherche est en heure locale, c'est-à-dire avec des décalages de fuseau horaire et d'heure d'été appliqués. Ainsi, par exemple, au Royaume-Uni, nous avons une heure manquante 1:00-1:59 le jour à court de telle sorte que la sortie serait:J'ai besoin d'afficher les heures locales sur les transitions DST en utilisant Javascript Date Object

00:00, 02:00, 03:00

Et sur la longue journée, nous avons une heure supplémentaire de 01h00 à 02h00 tel que la sortie serait:

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

J'ai déjà trouvé ces deux réponses brillantes qui mettent en évidence certains pièges et abordent une partie de mon problème:

Mais la vraie difficulté est à faire javascript au courant de ce manque et l'heure supplémentaire (pour ainsi dire) identifiés dans la deuxième question mentionnée ci-dessus.

Je pense qu'une solution potentielle à cela serait d'opérer en UTC (alias GMT) et de faire juste une conversion en heure locale mais j'ai du mal à voir comment je pourrais faire cela.

Est-ce que quelqu'un a des idées sur comment réaliser ce que je cherche?

Répondre

3

Si vous avez un fuseau horaire fixe, le code javascript suivant semble fonctionner (testé sur la dernière version de Chrome et 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) 
} 

Voici un jsFiddle: http://jsfiddle.net/Vsd2A/3/ pour voir le code en action!

+0

Merci Krtek, j'ai pris votre exemple et l'ai adapté comme indiqué dans ma réponse. –

1

Adaptation ce Krtek est venu avec (pour mon fuseau horaire - Royaume-Uni) J'ai maintenant ce qui suit:

// 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) 
} 

Ce qui a l'avantage de ne pas avoir à construire un nouvel objet à chaque itération.

Questions connexes