JavaScript's Date对象是否自动处理夏令时?
Does JavaScript's Date object automatically handle daylight savings?
我正在调查一个涉及将序列化的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)
。浏览器已经识别出需要为夏时制添加一个小时。
我的问题是,如果我在10月30日之后再次运行相同的代码,当时钟返回时,我仍然会得到23:30的相同结果,或者它会是22:30,如果它是GMT?换句话说,浏览器添加一个小时是因为主题日期是夏时制还是因为我们目前处于夏时制?
组策略禁止我更改工作站的系统时钟,否则我将跳过它并亲自测试。
Javascript Date对象使用的时间值是自1970-01-01T00:00:00Z以来以毫秒为单位的偏移量。总是UTC。
如果给Date构造函数一个数字参数,它将被视为UTC时间值,因此无论系统时区设置如何,它都表示同一时刻。
当你使用console.log(date)
时,会调用内置的toString方法,它会生成一个与实现相关的字符串,通常使用主机系统的当前时区设置来创建一个方便的,人类可读的字符串。
当前系统中的夏令时规则用于确定用于"本地"时间的偏移量,因此如果日期从适用夏令时的时间更改为不适用夏令时的时间,则时区偏移量将类似地进行调整(注意夏令时偏移量并不总是1小时)。当前的系统偏移量是什么并不重要,所使用的偏移量是基于时间值所代表的日期和时间的设置。
同样,Date对象非常简单,它们只是一个时间值。时区偏移量来自系统设置,它不是Date本身的属性。
所以,鉴于:
我的问题是,如果我在30号之后再次运行相同的代码当十月的时钟拨回,我还会得到同样的23:30的结果,或者如果是格林尼治时间是22:30 ?
答案是"是",它仍然是23:30,因为9月13日适用英国夏令时。代码何时运行并不重要,重要的是该日期的系统偏移量设置。
在您的示例中,使用epoch 1473805800000创建Date,并将其转换为您的时区GMT+0100。Epoch始终是UTC时间,因此它被读取为UTC并转换为您当前的时区。
2016年9月13日,GMT+01为夏令时,因此在演算中考虑。
在我的例子中,运行与您的相同的代码,得到以下结果:
Thu Sep 15 2016 14:13:14 GMT-0300 (E. South America Standard Time)
- 可以't让我的if语句处理js中的html表单输入
- keyup事件处理程序更改焦点不适用于快速键入
- 如何使用jquery处理php循环通过元素
- angular.js没有'无法在PhoneGap中处理视图标记
- Webpack/Rect:遵循egghead.io教程,但出现错误:您可能需要一个合适的加载程序来处理此文件类型
- 提示使用服务器端事件处理程序激活JavaScript
- javascript:如何在antlr生成的Lexer中进行错误处理
- 如何编写一个具有公共标头的批处理
- 在同一个服务工作者中处理service-worker.js有任何影响吗
- 如何处理node.js节点mongodb中的连接和查询队列
- 通过命令行/批处理文件打开页面时,将javascript代码注入Google Chrome
- 如何处理10页以上的静态页眉/页脚
- 将事件处理程序绑定到任何可能的事件
- 通过ajax将坐标传递到php服务器端,并在处理后检索到javascript
- 在尝试拉取一个月的第一天时,如何处理夏令时
- 如何处理夏令时时区偏移量
- 如何在JavaScript中处理夏令时和时区
- Javascript处理不同时区的夏令时
- 是否有一个jQuery日期格式化插件,可以处理多个时区和适当的夏令时
- JavaScript's Date对象是否自动处理夏令时?