2013-03-18 28 views
20

当我创建两个完全相同的JavaScript Date对象并对它们进行比较时,看起来它们并不相同。如何测试两个JavaScript日期是否具有相同的值?两个相同的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

+0

之前也coverted值的字符串检查[这](http://stackoverflow.com/questions/7244513/javascript-date-comparisons-dont-equal) – 2013-03-18 05:47:59

+1

要看看两个日期是否相等,你可以做'+ a == + b'或'! (a - b)',但这可能有点混乱。不要将解析随机日期字符串解析为Date构造函数,要么提供符合标准的字符串(尚未得到一致支持),要么按照[ECMA-262](http://www.ecma-international.org/)提供值ECMA-262/5.1 /#仲丁基15.9.3.1)。 – RobG 2013-03-18 05:53:49

回答

19

首先,你在这里比较的参考吭声错误。看看这个:

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 
} 
+2

好的答案 - 特别是因为我发现date.GetTime()误导(表明它会给我时间(即使我知道没有时间对象)) – 2014-12-03 17:59:18

0

我在for循环中许多类型的值进行比较,所以我无法通过减去评估他们,而是我比较

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