我正在调查一个涉及将序列化 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)
IE。浏览器已经认识到需要为 DST 添加一个额外的小时。
我的问题是,如果我在 10 月 30 日时钟回退之后再次运行相同的代码,我仍然会得到 23:30 的相同结果,还是会像 GMT 一样是 22:30?换句话说,浏览器是因为主题日期是 DST 还是因为我们目前处于 DST 中而增加了一个小时?
我被阻止通过组策略更改我的工作站的系统时钟,否则我会及时跳过它并自己进行测试。
最佳答案
Javascript Date 对象使用一个时间值,它是自 1970-01-01T00:00:00Z 以来的毫秒偏移量。它始终是 UTC。
如果为 Date 构造函数提供了单个数字参数,则将其视为 UTC 时间值,因此无论系统时区设置如何,都表示同一时刻。
当您使用 console.log(date)
,调用内置的 toString 方法,生成依赖于实现的字符串,通常使用主机系统的当前时区设置来创建一个方便的、人类可读的字符串。
系统中当前的夏令时规则用于确定用于“本地”时间的偏移量,因此如果日期从夏令时适用的时间更改为不适用夏令时的时间,则时区偏移量将进行类似调整(请注意,夏令时偏移并不总是 1 小时)。当前系统偏移量是多少无关紧要,所使用的偏移量基于时间值所代表的日期和时间的设置。
此外, Date 对象非常简单,它们只是一个时间值。时区偏移来自系统设置,它不是 Date 本身的属性。
所以,给定:
My question is, if I were to run this same code again after the 30th October when the clocks have gone back, would I still get the same result of 23:30, or would it be 22:30 as if it were GMT?
答案是"is",因为英国夏令时 9 月 13 日适用,仍然是 23:30。代码何时运行并不重要,重要的是该日期的系统偏移设置。
关于javascript - JavaScript 的 Date 对象会自动处理夏令时吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39516707/