I've tried searching for people with similar questions, but haven't found anything.
I have two dates in JavaScript, both set to the same value... Equality Testing fails on ==, but >= and <= evaluate true.
Below is the code I have in play:
var startDate = new Date( 2011, 7, 30, 0, 0, 0, 0 ); var dt = new Date( 2011, 7, 30, 0, 0, 0, 0 ); if( startDate == dt ) document.write('They Equal<br />'); if( startDate > dt ) document.write('Start Date is > dt<br />'); if( startDate >= dt ) document.write('Start Date is >= dt<br />'); if( startDate < dt ) document.write('Start Date is < dt<br />'); if( startDate <= dt ) document.write('Start Date is <= dt<br />'); if( dt == startDate ) document.write('They Equal<br />'); if( dt > startDate ) document.write('dt > startDate<br />'); if( dt >= startDate ) document.write('dt >= Start Date <br />'); if( dt < startDate ) document.write('dt < Start Date <br />'); if( dt <= startDate ) document.write('dt <= Start Date <br />'); document.write( dt ); document.write( '<br />'); document.write( startDate );
Has anyone encountered anything like this, or am I doing something fundamentally wrong?
I tested this is Internet Explorer (9), Firefox 5+, and Chrome.
Update:
So two people posted great answers to my problem, and I thank both of you: xdazz and DaveRandom. I had read an earlier post on stackoverflow.com on a similar question and a guy said that date objects could be compared like any others, and any other example I found always did a < or > type of compare, never a full equality so I wasn't able to make the connection as to why I was doing it wrong.
Thanks to you two, and the others that posted similar answers.
Use === if you want to compare couple of things in JavaScript, it's called strict equality, it means this will return true if only both type and value are the same, so there wouldn't be any unwanted type correction for you, if you using == , you basically don't care about the type and in many cases you could face ...
In JavaScript, we can compare two dates by converting them into numeric values to correspond to their time. First, we can convert the Date into a numeric value by using the getTime() function. By converting the given dates into numeric values we can directly compare them.
The JavaScript not equal or inequality operator (!=) checks whether two values are not equal and returns a boolean value. This operator tries to compare values irrespective of whether they are of different types. However, the “!==
I think if you do
var startDate = (new Date( 2011, 7, 30, 0, 0, 0, 0 )).getTime(); var dt = (new Date( 2011, 7, 30, 0, 0, 0, 0 )).getTime();
At the top of the script you will find it works.
The getTime()
method returns the date as an integer, what you are doing there is comparing objects, rather than specific values.
EDIT Fixed above code
When you use <=
or >=
to compare two date objects, they are compared via valueOf
, which is the same as getTime
for Date.
But when you use ==
, they are two different objects of the same type, so it returns false.
Added some examples:
> new Date(2011, 7, 30, 0, 0, 0, 0) == new Date( 2011, 7, 30, 0, 0, 0, 0 ) false > new Date(2011, 7, 30, 0, 0, 0, 0).getTime() == new Date( 2011, 7, 30, 0, 0, 0, 0).getTime() true > new Date(2011, 7, 30, 0, 0, 0, 0).valueOf() == new Date( 2011, 7, 30, 0, 0, 0, 0).valueOf() true > new Date(2011, 7, 30, 0, 0, 0, 0).valueOf() == new Date( 2011, 7, 30, 0, 0, 0, 0).getTime() true
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With