2011-09-05 68 views
6

我試圖輸出小時一系列倍(上一小時)內的Javascript區間(所以在Web瀏覽器如Firefox)DST過渡到本地顯示的時間。這一系列的時間將重疊的短日(春季失去一個小時)和漫長的一天(秋季減去一個小時)。我正在查找的輸出是在當地時間,即應用了時區和DST偏移量。因此,例如,在英國,我們有從01:00缺少小時到01:59在短日照使得輸出將是:需要在使用Javascript Date對象

00:00,02:00,03:00

而在漫長的一天,我們從01:00到02:00有額外的時間,因此輸出將是:

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

我已經找到了這兩個精彩的答案,突出一些陷阱,並解決我的問題的一部分:

但真正的困難在於使JavaScript的意識到這種缺失和額外小時(這麼說),如上面提到的第二個問題確定的。

我覺得這個潛在的解決方案將是UTC(又名GMT)來操作,只是做一個轉換爲本地時間,但我掙扎,看我怎麼能做到這一點。

有沒有人有關於如何實現我以後的任何想法?

回答

3

如果你有一個固定的時區,下面的JavaScript代碼似乎工作(在最後一個Chrome版本和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) 
} 

這裏有一個的jsfiddle:http://jsfiddle.net/Vsd2A/3/在行動中看到的代碼!

+0

謝謝Krtek,我已經採取了你的榜樣,並根據我的回答進行了修改。 –

1

適應Krtek已經想出(我的時區 - 英國)現在我有以下幾點:

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

尚未不必構造在每次迭代的新對象的利益。