在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中比较两个相同的日期[重复]的主要内容,如果未能解决你的问题,请参考以下文章

使用javascript比较日期时间

JavaScript - 两个时间字符串之间的差异[重复]

JavaScript中的对象比较[重复]

如何在javascript中比较两个字符串日期?

关于如何去除数组中重复项

检查两个 Java 日期是不是相同 |安卓[重复]