浏览器显示DST更改后重复的日期时间值

时间:2017-04-05 13:31:33

标签: javascript html datetime

我试图在数据表中显示一些数据时间值,这是示例代码

<html>
  <head>
    <script type="text/javascript">
        console.log(new Date(2017,2,26,0,0,0));
        console.log(new Date(2017,2,26,1,0,0));
        console.log(new Date(2017,2,26,2,0,0));
        console.log(new Date(2017,2,26,3,0,0));
    </script>
  </head>
  <body>
  </body>
</html>

浏览器显示上午2点的重复值。 这是日志输出

Sun Mar 26 2017 00:00:00 GMT+0000 (GMT Standard Time)
Sun Mar 26 2017 02:00:00 GMT+0100 (GMT Daylight Time)
Sun Mar 26 2017 02:00:00 GMT+0100 (GMT Daylight Time) **(Should it not be 3am)**
Sun Mar 26 2017 03:00:00 GMT+0100 (GMT Daylight Time) **(Should it not be 4am)**

我知道我可以使用Date.UTC()

console.log(new Date(Date.UTC(2017,2,26,0,0,0)));
console.log(new Date(Date.UTC(2017,2,26,1,0,0)));
console.log(new Date(Date.UTC(2017,2,26,2,0,0)));
console.log(new Date(Date.UTC(2017,2,26,3,0,0)));

但是这会在其他时区显示错误的日期时间值。 有人可以建议解决这个问题吗?或者有人可以解释这里发生的事情......?

2 个答案:

答案 0 :(得分:1)

此行为取决于您计算机上当前设置的时区参与夏令时的时间Does Everyone Observe Daylight Saving Time?

如果您将语言环境切换到冰岛时区,例如(UTC+00:00) Monrovia, Rejkjavik并在控制台中执行代码:

new Date(2017,2,26,0,0,0)
new Date(2017,2,26,1,0,0)
new Date(2017,2,26,2,0,0)
new Date(2017,2,26,3,0,0)

您将看到显示所有小时数的输出:

Sun Mar 26 2017 00:00:00 GMT+0000 (Greenwich Standard Time)
Sun Mar 26 2017 01:00:00 GMT+0000 (Greenwich Standard Time)
Sun Mar 26 2017 02:00:00 GMT+0000 (Greenwich Standard Time)
Sun Mar 26 2017 03:00:00 GMT+0000 (Greenwich Standard Time)

对于参与夏令时的国家,根据时区,我们将失踪。

您还可以查看(UTC+10:00) Brisbane,澳大利亚,您会看到从3月27日午夜到3月27日午夜的所有时间都正确显示。

答案 1 :(得分:-2)

如果您可以使用库,我强烈建议您使用MomentJS,这将使您的生活更轻松。

console.log(moment("2017-02-26 00:00:00").format());  
console.log(moment("2017-02-26 01:00:00").format());  
console.log(moment("2017-02-26 02:00:00").format());  
console.log(moment("2017-02-26 03:00:00").format());