[英]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方法(如getHours , getMinutes等)的主機系統時區偏移量。
同樣,當前系統設置的時區偏移量用於歷史日期。 因此,如果將主機設置為夏令時,則它將應用於實施夏令時的日期。 同樣,不應用夏令時轉換日期和時間(甚至值)的歷史更改。 假定當前設置始終適用於過去和將來的日期。
因此,以下所有內容在創建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.