【发布时间】:2019-08-10 18:31:09
【问题描述】:
在比较多个日期时需要了解日期的工作原理
console.log(new Date('2019-10-10T05:00:00.000+0000') >= new Date('2019-10-10T10:30:00.000+0530')) // true
console.log(new Date('2019-10-10T05:00:00.000+0000') <= new Date('2019-10-10T10:30:00.000+0530')) // true
console.log(new Date('2019-10-10T05:00:00.000+0000') == new Date('2019-10-10T10:30:00.000+0530')) // false
console.log(+new Date('2019-10-10T05:00:00.000+0000') == +new Date('2019-10-10T10:30:00.000+0530')) // true
为什么前两个语句返回 true 和第三个 false。请求解释/链接,请。
【问题讨论】:
-
您提供的 ISO 字符串不是有效的日期字符串。
-
@WillAlexander 这些有什么问题?对我来说,它们看起来像是有效的 ISO 字符串,而 ISO 字符串是 JavaScript 具有明确行为的唯一字符串格式。使用任何非 ISO 字符串格式都是由实现定义的,这是个坏主意。
-
尝试用它们创建一个新的 Date 对象,然后调用任何方法,它都会失败。 en.wikipedia.org/wiki/ISO_8601 — 至于这些都不起作用的原因,这是因为您本质上是在比较引用,而不是对象的内部数据。你不能像那样测试深度平等。
-
@WillAlexander——维基百科不是参考资料。 OP 字符串 是 有效的 ISO 8601,但它们不是有效的 ECMA-262 格式,而这正是它们所需要的。 ECMA-262 要求偏移量的小时和分钟之间有一个冒号(在 ISO 8601 中,冒号是可选的,分钟也是如此)。
-
new Date('2019-10-10T05:00:00.000+0000')可能会产生无效的日期,因为偏移量的小时和分钟之间的冒号丢失(如ECMA-262 所要求的那样)。解析任何不符合 ECMA-262 要求的完全格式取决于实现,因此您可能会得到一个有效的日期,也可能不是。对于 OP 格式,Safari 生成无效的日期。
标签: javascript node.js date new-operator console.log