2016-09-15 104 views
1

我正在研究涉及將序列化的UTC日期轉換爲JavaScript日期對象的問題;我已經閱讀了關於這個主題的一些問題,但我仍然不清楚。JavaScript的Date對象是否自動處理日光節約?

首先讓我說我在英國。如果我採取例如UTC時代1473805800000,這是Tue, 13 Sep 2016 22:30:00 GMT,然後使用該值來創建一個JavaScript日期:

var date = new Date(1473805800000); 
console.log(date); 

控制檯日誌:

Tue Sep 13 2016 23:30:00 GMT+0100 (GMT Summer Time) 

即瀏覽器已經認識到需要爲DST添加額外的小時。

我的問題是,如果我在10月30日之後再次運行這個相同的代碼,那麼我是否仍然會得到23:30的相同結果,或者是22:30,就好像它一樣是GMT嗎?換句話說,瀏覽器增加了一個小時,因爲主題日期是DST或因爲我們目前在DST中?

我無法通過組策略改變我的工作站的系統時鐘,否則我會在時間上跳過它並自己測試。

+0

這可能會幫助你:https://stackoverflow.com/questions/4631928/convert-utc-epoch-to-local-date-with-javascript –

+0

http://stackoverflow.com/questions/11887934/check- if-day-saving-time-is-in-effect-and-if-it-is-for-how-hours- – jollarvia

+1

1473805800000是一個數字,[* ECMAScript Date epoch *](http:// ecma- international.org/ecma-262/7.0/index.html#sec-time-values-and-time-range)是1970-01-01T00:00:00Z。 ;-) – RobG

回答

3

javascript日期對象使用是一種以毫秒爲單位,因爲1970-01-01T00偏移時間值:00:00Z 。它始終是UTC。

如果Date構造函數被賦予一個單獨的數字參數,則它被視爲UTC時間值,因此表示相同的即時時間,而不管系統時區設置如何。

當使用console.log(date),內置的toString方法被調用,其產生依賴於實現的字符串,通常使用主機系統的當前時區設置來創建一個方便,人類可讀的字符串。

系統中的當前夏令時規則用於確定用於「本地」時間的偏移量,因此如果日期從夏令時適用的時間更改爲不適用的時間,則時區偏移將進行類似的調整(請注意,夏令時偏移不總是1小時)。無論當前的系統偏移是什麼,所用的都是基於時間值表示的日期和時間的設置。

另外,Date對象非常簡單,它們只是一個時間值。時區偏移來自系統設置,它不是日期本身的屬性。

因此,考慮到:

我的問題是,如果我當時鍾已經回到30 十月份以後再次運行此相同的代碼,我仍然會得到23同樣 結果: 30,還是22:30,好像是格林威治標準時間?

答案是肯定的,自從9月13日BST適用以來,它仍然是23:30。代碼運行時無關緊要,只是該日期的系統偏移量設置。

1

就你而言,日期使用紀元1473805800000創建並轉換爲你的時區GMT + 0100。時代始終是UTC時間,因此它被讀作UTC並轉換爲您當前的時區。

2016年9月13日,格林尼治標準時間+01有夏令時,因此它在演算中被考慮。

在我的情況,我得到以下,運行相同的代碼你:

Thu Sep 15 2016 14:13:14 GMT-0300 (E. South America Standard Time) 
+0

時代是用於相對測量的基準。對於ECMAScript時間值,時期爲1970-01-01T00:00:00Z。如果作爲時間值使用,則數字1473805800000與代表2016-09-13T22:30:00.000Z的時期相比以毫秒爲單位的偏移量。 – RobG