javascript - JavaScript 的 Date 对象会自动处理夏令时吗?

标签 javascript date dst

我正在调查一个涉及将序列化 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/

相关文章:

javascript - 获取对本地文件的请求不起作用

net.java.ao.Entity 中的 java.util.Date

python - 将日期转换为一年中的某一天,而不使用日期时间

java - 如何在Java 1.6中正确处理时区和夏令时

javascript - chrome.tabs.executeScript(...) 时 Chrome 扩展的跨源问题

javascript - 通过子级的回调属性更新父级的状态(React.js)

javascript - 如何生成一个新的随机数(与之前的随机数不同)

ios - DateFormatter 不返回 "HH:mm:ss"的日期

iOS - setDefaultTimeZone 是否自动处理夏令时和时区偏移?

java - 获取启用时区的 DateTime 实例的字母数字月份值