2011-09-05 8 views
6

Próbuję wypisać szereg razy w odstępach godzinnych (w ciągu godziny) w JavaScript (czyli w przeglądarce internetowej, takiej jak Firefox). Ta seria razy pokryje się z krótkim dniem (tracąc godzinę na wiosnę) i długim dniem (zyskuje godzinę na jesieni). Dane wyjściowe, których szukam, są w czasie lokalnym, tzn. Z zastosowanymi strefami czasowymi i przesunięciami czasu letniego. Tak na przykład w Wielkiej Brytanii mamy brakującą godzinę od 01:00 do 01:59 na krótki dzień tak, że wyjście będzie:Konieczność wyświetlania czasów lokalnych nad przejściami DST przy użyciu Javascript Date Object

00:00, 02:00, 03:00

A w długi dzień mamy dodatkową godzinę od 01:00 do 02:00, tak, że wyjście będzie:

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

Znalazłem już te dwie genialne odpowiedzi, które podkreślają pewne pułapki i zajmują się częścią mojego problemu:

Ale prawdziwa trudność w podejmowaniu JavaScript jest świadomy tego brakuje i dodatkową godzinę (że tak powiem), jak wskazano w pytaniu drugim wspomnianym powyżej.

Myślę, że potencjalne rozwiązanie tego problemu byłoby działać w UTC (inaczej GMT) i po prostu zrobić konwersję na czas lokalny, ale ja walczę, aby zobaczyć, jak mógłbym to zrobić.

Czy ktoś ma jakieś pomysły na temat tego, jak osiągnąć to, co chcę?

Odpowiedz

3

Jeśli masz stałą czasową, następujący kod JavaScript wydaje się działać (testowane na ostatniej wersji chrom i 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) 
} 

Oto JSFiddle: http://jsfiddle.net/Vsd2A/3/, aby zobaczyć kod w akcji!

+0

Dzięki Krtek, wziąłem twój przykład i dostosowałem go tak, jak pokazano w mojej odpowiedzi. –

1

Adaptacja co Krtek ma pochodzić z (dla mojej strefy czasowej - UK) Mam teraz następujące:

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

który korzyści nie konieczności budowy nowego obiektu na każdej iteracji.

Powiązane problemy