Reputation: 6660
When I create two identical JavaScript Date
objects and then compare them, it appears that they are not equal. How to I test if two JavaScript dates have the same value?
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?
Upvotes: 29
Views: 14588
Reputation: 21842
First of all, you are making a sound mistake here in comparing the references. Have a look at this:
var x = {a:1};
var y = {a:1};
// Looks like the same example huh?
alert (x == y); // It says false
Here, although the objects look identical they hold different slots in memory. Reference stores only the address of the object. Hence both references (addresses) are different.
So now, we have to compare the values since you know reference comparison won't work here. You can just do
if (date1 - date2 == 0) {
// Yep! Dates are equal
} else {
// Handle different dates
}
Upvotes: 23
Reputation: 1
I compare many kinds of values in a for loop, so I wasn't able to evaluate them by substracting, instead I coverted values to string before comparing
var a = [string1, date1, number1]
var b = [string2, date2, number2]
for (var i in a){
if(a.toString() == b.toString()){
// some code here
}
}
Upvotes: 0
Reputation: 6660
It appears this has been addressed already.
To check whether dates are equal, they must be converted to their primitives:
date1.getTime()=== date2.getTime()
//true
Upvotes: 55