在Javascript中比较两个相同的日期[重复]
Posted
技术标签:
【中文标题】在Javascript中比较两个相同的日期[重复]【英文标题】:Comparing two same dates in Javascript [duplicate] 【发布时间】:2021-10-03 14:10:09 【问题描述】:我尝试在 chrome 控制台中比较 2 个相同的日期:
new Date("2021-06-23") == new Date("2021-06-23")
这是假的
新日期(“2021-06-23”)>新日期(“2021-06-23”)
这是假的
但是,new Date("2021-06-23") >= new Date("2021-06-23")
这是真的
我不明白为什么它对大于或等于给出 true,而对大于和等于也给出 false。
请解释一下。
【问题讨论】:
==
应用于对象时检查它们是否同一个对象,而不是两个不同的对象但具有相似的内容。关系运算符改为进行隐式转换。
^ 这个。相比之下,Date
对象为 >/>=/</<=
运算符定义了比较日期值的行为。
我还应该指出,由于您没有定义日期的时间部分,因此无法保证 new Date("2021-06-23") == new Date("2021-06-23")
无论如何都是正确的,因为调用之间的毫秒数可能会发生变化。
这能回答你的问题吗? javascript Date Object Comparison。另见JavaScript Date Comparisons Don't Equal。
@NiettheDarkAbsol 如果传递了 ISO 日期字符串,那么毫秒将被初始化为零。
【参考方案1】:
Date 对象本身不支持 grater 或 equal 运算符...它有类似 Symbol.toPrimitive
当它应该被转换为适当的原始值时被调用的函数
const object1 =
[Symbol.toPrimitive](hint)
if (hint === 'number')
return 42;
return null;
;
console.log(+object1);
// expected output: 42
所以如果你想比较两个日期是否相等,那么你可以这样做
+new Date() === +new Date()
当您使用任何此类运算符 + - * / < >
时,它希望将其转换为数字,因此您实际上是在比较数字而不是对象
【讨论】:
更好的参考是ECMA-262 Abstract Relational Comparison Algorithm,它使用了普通的ToPrimitive抽象操作。 Symbol.ToPrimitive 专门用于 Symbol 对象,而不是 Date 对象。【参考方案2】:因为new Date
创建了一个唯一的对象。
即使它们具有相同的属性,两个不同的对象也永远不会相等。
const x = a : "aaa";
const y = a : "aaa";
console.log(x == y); // false
const z = x; // litteraly the same object
console.log(x == z); // true
【讨论】:
以上是关于在Javascript中比较两个相同的日期[重复]的主要内容,如果未能解决你的问题,请参考以下文章