Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript';s日期对象是否自动处理夏令时?_Javascript_Date_Dst - Fatal编程技术网

JavaScript';s日期对象是否自动处理夏令时?

JavaScript';s日期对象是否自动处理夏令时?,javascript,date,dst,Javascript,Date,Dst,我正在调查一个涉及将中的序列化UTC日期转换为JavaScript日期对象的问题;我已经读了一些关于这个话题的问题,但我仍然不清楚 首先让我说我在英国。如果以UTC epoch1473805800000为例,即2016年9月13日星期二22:30:00 GMT,则使用该值创建JavaScript日期: var date = new Date(1473805800000); console.log(date); 控制台记录: Tue Sep 13 2016 23:30:00 GMT+0100 (

我正在调查一个涉及将中的序列化UTC日期转换为JavaScript日期对象的问题;我已经读了一些关于这个话题的问题,但我仍然不清楚

首先让我说我在英国。如果以UTC epoch
1473805800000
为例,即2016年9月13日星期二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或我们当前处于DST而增加了一小时


集团政策禁止我更改工作站的系统时钟,否则我会及时跳过它并亲自测试。

在您的情况下,日期是使用纪元1473805800000创建的,并转换为您的时区GMT+0100。历元始终是UTC时间,因此它被读取为UTC并转换为当前时区

2016年9月13日,GMT+01有夏季时间,因此在演算中予以考虑

在我的例子中,运行与您相同的代码,我得到以下结果:

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

Javascript日期对象使用的时间值是自1970-01-01T00:00:00Z以来以毫秒为单位的偏移量。总是UTC

如果给Date构造函数一个数字参数,它将被视为UTC时间值,因此无论系统时区设置如何,它都表示相同的时间瞬间

使用
console.log(date)
时,将调用内置的toString方法,该方法生成依赖于实现的字符串,通常使用主机系统的当前时区设置来创建方便的、人类可读的字符串

系统中当前的夏令时规则用于确定“本地”时间使用的偏移量,因此,如果日期从夏令时适用的时间更改为不适用夏令时的时间,则时区偏移量也将进行类似的调整(请注意,夏令时偏移量并不总是1小时)。当前系统偏移量是多少并不重要,使用的偏移量基于时间值表示的日期和时间的设置

此外,日期对象非常简单,它们只是一个时间值。时区偏移量来自系统设置,它不是日期本身的属性

因此,鉴于:

我的问题是,如果我在30号之后再次运行同样的代码 十月,当时钟倒转时,我还会得到同样的结果吗 结果是23:30,还是22:30就好像是格林尼治标准时间


答案是“是”,自9月13日英国夏令时开始,仍然是23:30。运行代码的时间无关紧要,只关心该日期的系统偏移设置。

这可能会帮助您:1473805800000是一个数字,是1970-01-01T00:00:00Z;-)历元是用于相对测量的基准。对于ECMAScript时间值,历元为1970-01-01T00:00:00Z。如果用作时间值,则数字1473805800000是表示2016-09-13T22:30:00.000Z的历元的偏移量(以毫秒为单位)。