2010-11-05 131 views

回答

19

最好的方法是不要處理DST。使用UTC方法,您不必擔心跨越DST邊界或任何其他時區不連續性(區域設置時區規則可能因爲更多原因而不僅僅是DST)而發生變化。

var timestamp= Date.UTC(2010, 10-1, 31, 0, 0, 0); // zero-based month: 9->october 
var nextday= new Date(timestamp+86400000); // add one day 
var ymd= [ 
    nextday.getUTCFullYear(), 
    nextday.getUTCMonth()+1, // zero-based month 
    nextday.getUTCDate() 
].join('-'); 
alert(ymd); // 2010-11-1 

如果以上已與new Date(2010, ...)getDate()等完成的,它會返回2010-10-31,增加全天的失敗是由於DST變化(在我區,反正)。

很遺憾,Date中的'默認'最顯而易見的方法是關於本地時間的,特別是因爲JavaScript在'本地時間'實際上對腳本提供非常少的上下文。 UTC是一個更穩定的命題。

+1

同意,我曾經在一個時間和出勤應用程序工作,所以這是一個非常普遍的問題。我們的方法是始終使用UTC方法。爲了顯示正確的時間(並接收來自員工的輸入),我們需要知道每個員工(可能在多個時區中)的時區偏移量以及DST在該時區偏移量中有效的天數列表 – 2010-11-05 22:00:13

1

使用Date.setHours(hour,min,sec,millisec)設置小時默認爲中午: Date.setHours(11);view reference)中午在一天

24小時後是保證第二天,雖然在夏令時天將是一個小時(它根本不會改變你的腳本的結果)。

相關問題