簡體   English   中英

JavaScript的Date對象是否自動處理夏令時?

[英]Does JavaScript's Date object automatically handle daylight savings?

我正在調查涉及將序列化UTC日期轉換為JavaScript日期對象的問題; 我已經閱讀了關於這個主題的幾個問題,但我仍然不清楚。

首先讓我說我在英國。 如果我采用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,好像它是格林尼治標准時間? 換句話說,瀏覽器是否添加了一小時,因為主題日期是DST還是因為我們目前處於夏令時?

我無法通過組策略更改工作站的系統時鍾,否則我會及時跳過它並自行測試。

Javascript Date對象使用的時間值是自1970-01-01T00:00:00Z以來的偏移量(以毫秒為單位)。 它始終是UTC。

如果為Date構造函數指定了單個數字參數,則將其視為UTC時間值,因此無論系統時區設置如何,都表示同一時刻。

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

系統中的當前夏令時規則用於確定用於“本地”時間的偏移量,因此如果日期從夏令時應用的時間改變為不改變,則時間偏移量將同樣調整(請注意,夏令時偏移不總是1小時)。 當前系統偏移量無關緊要,使用的是基於時間值表示的日期和時間的設置。

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

所以,給定:

我的問題是,如果我在10月30日之后再次運行相同的代碼時鍾表已經回來了,我是否仍會得到23:30的相同結果,或者它是22:30,好像它是格林尼治標准時間?

答案是“是”,自9月13日BST適用后仍將是23:30。 運行代碼時無關緊要,只有該日期的系統偏移設置。

在您的情況下,日期是使用紀元1473805800000創建的,並轉換為您的時區GMT + 0100。 Epoch始終為UTC時間,因此它被讀取為UTC並轉換為您當前的時區。

2016年9月13日,GMT + 01有夏季時間,因此在微積分中被考慮。

就我而言,我得到以下內容,運行與您相同的代碼:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM