为什么JS日期就是这样的?

时间:2014-07-10 10:56:53

标签: javascript arrays date

我有一个名为dateArr的数组,其中包含:[2014,07,10];

当我创建一个日期时,如下所示:

new Date(dateArr[0], Number(dateArr[1]), Number(dateArr[2]), 0, 0, 0);

在控制台中评估为“2014-08-09T23:00:00.000Z”。 我知道几个月基于零,但为什么要纠正时间,我必须这样做:

new Date(dateArr[0], Number(dateArr[1]) - 1, Number(dateArr[2]), 1, 0, 0);

给出:2014-07-10T00:00:00.000Z

这对我来说似乎不对,有人可以解释一下吗?

2 个答案:

答案 0 :(得分:2)

new Date(2014, 6, 10, 0, 0, 0)使用您当前的时区(对您而言为+0100,在莫斯科为我提供+0400)。所以它的结果取决于您运行代码的时区。

> new Date(2014, 6, 10)
Thu Jul 10 2014 00:00:00 GMT+0400 (MSK)
> new Date(2014, 6, 10).toISOString()
'2014-07-09T20:00:00.000Z'

如果你真的想要«ISO时间»的午夜,你可以使用带字符串的构造函数:

> new Date('2014-06-10Z').toISOString()
'2014-06-10T00:00:00.000Z'

答案 1 :(得分:1)

您的工具正在使用不同的时区。 (chrome dev工具输出表示通过将GMT + 0100(BST)添加到您的输出并因此将其转换为BST(英国夏令时)而webstorm为您提供utc / gmt时间。 事实上,2014-07-09T23:00:00.000与2014年7月10日星期四00:00:00 GMT + 0100(BST)完全相同。

您可以使用Date.UTC()生成正确的时间戳(但这将在当地时间的另一个方向关闭一小时)

我在我自己的chrome开发者控制台中尝试过这个:

> new Date(Date.UTC(2014, 6, 10, 0, 0, 0))
Thu Jul 10 2014 02:00:00 GMT+0200 (MESZ) //middle european summer time