簡體   English   中英

javascript創建日期而不進行夏令時轉換

[英]javascript create date without daylight savings conversion

當我使用日期構造函數new Date('2015','12')創建日期時,結果為2016年1月1日星期五格林尼治標准時間-0500(東部標准時間)。 但是,不要以為我提供的日期已經應用了日光轉換並創建2015年12月而不是2016年1月的日期對象

使用Date構造函數創建日期時, 幾乎總是使用主機系統的時區(根據ECMA-262)。 唯一的例外是提供了數字(解釋為時間值,即自ECMAScript時期以來的毫秒數),或者提供了帶有時區的ISO 8601格式字符串。 即使這樣,日期的內部時間值(即自紀元以來的毫秒數)也將以UTC進行計算,並且用於非UTC方法(如getHoursgetMinutes等)的主機系統時區偏移量。

同樣,當前系統設置的時區偏移量用於歷史日期。 因此,如果將主機設置為夏令時,則它將應用於實施夏令時的日期。 同樣,不應用夏令時轉換日期和時間(甚至值)的歷史更改。 假定當前設置始終適用於過去和將來的日期。

因此,以下所有內容在創建2016年2月3日的日期時將應用主機系統的時區偏移量:

new Date('2/3/2016'); // US format is assumed by most browsers.
                      // May also create an invalid Date
new Date(2016, 1, 3); // months are zero indexed so 1 is February
new Date('2016-02-03T00:00:00'); // note missing time zone

但是,以下內容將被視為UTC(或無效):

new Date('2016-02-03');  // contrary to ISO 8601, missing time zone for this
                         // format only is assumed to be UTC
new Date('2016-02-03T00:00:00Z'); // Note has a time zone of GMT

如果要從字符串可靠地為特定時間點創建日期,則必須提供帶時區偏移量的字符串。 然后自己解析,因為日期字符串的解析在很大程度上取決於實現,並且在實現之間會有所不同。 最好使用的格式是ISO 8601擴展格式,例如:

'2016-02-03T00:00:00-0800'

無論主機系統的設置是什么,它都表示同一時刻。 您只需要可靠地解析它即可。

有很多很好的用於解析和格式化的庫,或者您可以為特定的解析和輸出格式編寫自己的小函數。

暫無
暫無

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

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