【问题标题】:Two identical JavaScript dates aren't equal两个相同的 JavaScript 日期不相等
【发布时间】:2013-03-06 09:51:03
【问题描述】:

当我创建两个相同的 JavaScript Date 对象然后比较它们时,它们似乎不相等。如何测试两个 JavaScript 日期是否具有相同的值?

var date1 = new Date('Mon Mar 11 2013 00:00:00');
var date2 = new Date('Mon Mar 11 2013 00:00:00');
console.log(date1 == date2); //false?

JS Fiddle available here

【问题讨论】:

  • 另请查看this
  • 要查看两个日期是否相等,您可以使用+a == +b!(a - b),但这可能有点模糊。不要将随机日期字符串的解析留给 Date 构造函数,要么提供符合标准的字符串(尚未始终支持),要么提供每个 ECMA-262 的值。

标签: javascript date


【解决方案1】:

出现this has been addressed already

要检查日期是否相等,必须将它们转换为其原语:

date1.getTime()=== date2.getTime()
//true

【讨论】:

    【解决方案2】:

    首先,您在这里比较参考文献时犯了一个严重的错误。看看这个:

    var x = {a:1};
    var y = {a:1};
    
    // Looks like the same example huh!
    alert (x == y); // It says false
    

    在这里,虽然对象看起来相同,但它们在内存中拥有不同的插槽。 引用只存储对象的地址。因此,两个引用是不同的。

    所以现在,我们必须比较这些值,因为您知道参考比较在这里不起作用。 你可以这样做

    if (date1 - date2 == 0) {
        // Yep! Dates are equal
    } else {
       // Handle different dates
    }
    

    【讨论】:

    • 很好的答案 - 特别是因为我发现 date.GetTime() 具有误导性(表明它会给我时间(即使我知道没有时间对象))
    【解决方案3】:

    我在 for 循环中比较了多种值,因此无法通过减法来评估它们,而是在比较之前将值转换为字符串

    var a = [string1, date1, number1]
    var b = [string2, date2, number2]
    for (var i in a){
      if(a.toString() == b.toString()){
        // some code here
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-03
      • 1970-01-01
      • 1970-01-01
      • 2014-06-28
      • 2015-07-11
      • 1970-01-01
      相关资源
      最近更新 更多