【问题标题】:Comparing two same dates in Javascript [duplicate]在Javascript中比较两个相同的日期[重复]
【发布时间】: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") 无论如何都是正确的,因为调用之间的毫秒数可能会发生变化。
  • @NiettheDarkAbsol 如果传递了 ISO 日期字符串,那么毫秒将被初始化为零。

标签: javascript class date datetime


【解决方案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()

当您使用任何此类运算符 + - * / < > 时,它希望将其转换为数字,因此您实际上是在比较数字而不是对象

【讨论】:

【解决方案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

【讨论】:

    猜你喜欢
    • 2011-08-03
    • 2012-09-02
    • 1970-01-01
    • 2011-08-09
    • 1970-01-01
    • 2014-07-16
    • 1970-01-01
    • 1970-01-01
    • 2011-02-14
    相关资源
    最近更新 更多