【问题标题】:how to determine if 2 dates object equals each other? [duplicate]如何确定 2 个日期对象是否彼此相等? [复制]
【发布时间】:2023-03-24 17:30:01
【问题描述】:

这是我在 stackoverflow 中的第一个问题。

var str="Oct 13,2011";
var date1=new Date(str);
var date2=new Date(str);

当然 valueOf(date1)==valueOf(date2)

但是为什么 date1!=date2

或者说,如果它们相等,如何确定 2 个日期对象。

日期是一个js对象

【问题讨论】:

  • 轻微吹毛求疵:Javascript 区分大小写,这应该是new Date(),大写D

标签: javascript date


【解决方案1】:

Javascript 对象只有在引用相同的对象引用时才相等。您的代码中不是这种情况。

(参考:What is the standard definition of object equality for "=="?

编辑:你可以做一点类型转换:

var str="Oct 13,2011";
var date1 = new Date(str);
var date2 = new Date(str);

console.log(+date1 == +date2); // true

【讨论】:

    【解决方案2】:

    ===== 比较对象引用。

    日期 1 和日期 2 是从不同的引用创建的。因此,它们不相等。

    将您的 date1 和 date2 转换为原始数据类型并进行比较

    date1.getTime()=== date2.getTime()

    结果:真

    【讨论】:

      【解决方案3】:

      使用== 通常不起作用,因为它比较对象identities 而不是值。

      使用+ 前缀或getTime() 在比较之前转换为毫秒也可能会失败,如果您的日期对象具有时间组件并且您只想比较它们的日期部分。 (不要试图使用 toDate() 方法,因为它是月份中的某天,并且会丢弃月份和年份!)。

      这似乎是toDateString() 有用的少数几次之一,它是一个简洁的解决方案,无需使用额外的库。

      var date1=new Date("2014-12-10");
      var date2=new Date("2014-12-10T01:00");
      
      +date1 == +date2
      >false
      
      date1.getTime() == date2.getTime()
      >false
      
      date1.toDateString() == date2.toDateString()
      >true
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-12-04
        • 1970-01-01
        • 1970-01-01
        • 2011-09-08
        • 2018-08-31
        • 2018-03-31
        • 2021-04-14
        相关资源
        最近更新 更多