在上一個問題中,我寫了一個關於javascript日期函數的函數,它在11/07/101上神祕地停下來。感謝stackoverflow用戶,我被告知我的問題是夏令時。 Javascript date, is this my error or did I find a bug?JavaScript日期:處理夏令時的最佳方法是什麼?
所以我最後一個問題是在Javascript中處理夏令時的建議方法是什麼?
是http://code.google.com/p/datejs/解決此問題的最佳方法?
在上一個問題中,我寫了一個關於javascript日期函數的函數,它在11/07/101上神祕地停下來。感謝stackoverflow用戶,我被告知我的問題是夏令時。 Javascript date, is this my error or did I find a bug?JavaScript日期:處理夏令時的最佳方法是什麼?
所以我最後一個問題是在Javascript中處理夏令時的建議方法是什麼?
是http://code.google.com/p/datejs/解決此問題的最佳方法?
最好的方法是不要處理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是一個更穩定的命題。
使用Date.setHours(hour,min,sec,millisec)
設置小時默認爲中午: Date.setHours(11);
(view reference)中午在一天
24小時後是保證第二天,雖然在夏令時天將是一個小時(它根本不會改變你的腳本的結果)。
同意,我曾經在一個時間和出勤應用程序工作,所以這是一個非常普遍的問題。我們的方法是始終使用UTC方法。爲了顯示正確的時間(並接收來自員工的輸入),我們需要知道每個員工(可能在多個時區中)的時區偏移量以及DST在該時區偏移量中有效的天數列表 – 2010-11-05 22:00:13