【发布时间】:2015-11-29 11:14:47
【问题描述】:
我刚刚发现如果我使用new Date('2015-1-1'),时间是没有时区效果的,但是如果我使用new Date('2015-01-01'),那么在Node.js中时间是有时区效果的。
我输出 4 Date():
console.log(new Date('2015-1-1'));
console.log(new Date('2015-01-1'));
console.log(new Date('2015-1-01'));
console.log(new Date('2015-01-01'));
输出是
Thu Jan 01 2015 00:00:00 GMT+0800 (CST)
Thu Jan 01 2015 00:00:00 GMT+0800 (CST)
Thu Jan 01 2015 00:00:00 GMT+0800 (CST)
Thu Jan 01 2015 08:00:00 GMT+0800 (CST)
你可以看到最后一次是08:00:00,因为我在+8时区。
我认为输出取决于月份或日期的数字。当它是 10、11 或 12 时,输出总是08:00:00
我想知道为什么以及是否有更好的方法来处理这个问题,除了手动检查月份和日期编号的位?
【问题讨论】:
-
当我在 Chrome Javascript 控制台上运行您的示例时得到相同的输出,因此它似乎是 V8 错误/功能。
-
在 Firefox 中,除了最后一行之外,我得到的所有日期都是无效的。另外,我从 MDN 找到了这个:Differences in assumed time zone
-
解析日期字符串的另一个问题。 唯一 解析日期字符串的可靠方法是手动进行(尽管库可能会对此有所帮助)。前 3 个字符串不完全是 ISO 8601 字符串,因此可以根据实现的需要进行解析。最后一种是 ISO 8601 格式。根据 ECMAScript 2015,它被解析为主机系统的“本地”。在 ES5 下,它必须被解析为 UTC,在此之前(即 ECMAScript ed 3 和更早版本)任何东西,包括 NaN。
-
@RobG 您应该将其发布为答案。 :)
标签: javascript node.js date