29

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?

JS Fiddle available here

2
  • also check this Commented Mar 18, 2013 at 5:47
  • 1
    To see if two dates are equal, you could do +a == +b or !(a - b), but that may be a bit obfuscated. Don't leave parsing random date strings to the Date constructor, either provide a standards compliant string (which isn't consistently supported yet) or provide values per ECMA-262. Commented Mar 18, 2013 at 5:53

3 Answers 3

55

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
Sign up to request clarification or add additional context in comments.

Comments

23

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
}

1 Comment

Good answer - especially because I find date.GetTime() misleading (suggests it will get the time to me (even though I know there isn't a time object))
0

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

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.