两个相同的 JavaScript 日期不相等

Posted

技术标签:

【中文标题】两个相同的 JavaScript 日期不相等【英文标题】:Two identical JavaScript dates aren't equal 【发布时间】: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 的值。 【参考方案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
  

【讨论】:

以上是关于两个相同的 JavaScript 日期不相等的主要内容,如果未能解决你的问题,请参考以下文章

Javascript和datediff mysql中日期之间的日期差异不相等

将两个不相等的数据框与两个索引(日期时间和日期)上的部分公共元素合并

javascript判断两个日期是否相等

判断两个数组是不是相等

JS比较两个数组是否相等 是否拥有相同元素

javascript怎么判断字符串是不是相等