JavaScript Date Comparisons Don't Equal
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
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
This is one of the many illogical parts of Javascript. You can work around this problem by converting the date to a number using .getTime()
that will return how many milliseconds passed from that date and 00:00:00 of Jan 1, 1970.
if (a.getTime() === b.getTime()) ...
The ===
operator on the objects themselves will return always false because those two objects are indeed distinct mutable javascript objects.
PS: Don't use ==
operator with Javascript. Ever. What it does takes the term "crazy" to a whole new level. Seriously. The problem is that applies all sort of type conversions that simply make no sense and for example you end up with things like "1"==1
, x==false && (x?1:2)==1
or even a==b && b==c && a!=c
being true (e.g. with x=[]
or with a=[1], b=1, c=[[1]]
). Just don't use ==
. Ever. It's "FUBAR". Fullstop.