我有一个名为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
这对我来说似乎不对,有人可以解释一下吗?
答案 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