I'm trying to check if a date from a jQuery UI datepicker belongs to an array of dates that are holidays. Can't figure out what I'm doing wrong :(
var holidayArray2013 = [new Date('October 3, 2013 00:00:00 GMT+0200'), new Date('December 25, 2013 00:00:00 GMT+0100'), new Date('December 26, 2013 00:00:00 GMT+0100')];
var DateOfOrder = $('#datepicker').datepicker('getDate');
if ($.inArray(DateOfOrder, holidayArray2013) > -1) {
console.log("is holiday");
}
edit: console.log(DateOfOrder);
returns Thu Oct 03 2013 00:00:00 GMT+0200
just like holidayArray2013[0]
but $.inArray(DateOfOrder, holidayArray2013)
still returns -1
You're getting a false negative because comparing 2 date objects compares their references and not their values as you perhaps expected.
There are a few options, you could store the result of Date.getTime()
in your array which is just a numerical representation of the date:
var holidayArray2013 = [
new Date('October 3, 2013 00:00:00 GMT+0200').getTime(),
new Date('December 25, 2013 00:00:00 GMT+0100').getTime(),
new Date('December 26, 2013 00:00:00 GMT+0100').getTime()];
And then compare that:
var DateOfOrder = n$('#datepicker').datepicker('getDate').getTime();
if ($.inArray(DateOfOrder, holidayArray2013) > -1) ...
This works fine, as demonstrated here: http://jsfiddle.net/rRJer/
If, however you are constrained to not changing the holiday array you could loop to try to locate the right date value:
var isHoliday = false;
for(var i=0;i<holidayArray2013.length;i++){
if(holidayArray2013[i].getTime() == DateOfOrder.getTime()){
isHoliday = true;
break;
}
}
Demo is here: http://jsfiddle.net/3R6GD/
check this http://jsfiddle.net/WNYRs/
var holidayArray2013 = [new Date('October 3, 2013 00:00:00 GMT+0200').getTime(),
new Date('December 25, 2013 00:00:00 GMT+0100').getTime(),
new Date('December 26, 2013 00:00:00 GMT+0100').getTime()];
And use something like that:
var DateOfOrder = new Date($('#datepicker').datepicker({ dateFormat: 'yy-mm-dd' }).val()).getTime();
you have to use Date.getTime()
to compare two dates, see this : How to compare two date values with jQuery
You can use the .valueOf()
function over your dates, then the $.inArray
will do the job :
var holidayArray2013 = [
new Date('October 3, 2013 00:00:00 GMT+0200').valueOf(),
new Date('December 25, 2013 00:00:00 GMT+0100').valueOf(),
new Date('December 26, 2013 00:00:00 GMT+0100').valueOf() ];
var DateOfOrder = $('#datepicker').datepicker('getDate').valueOf();
if ($.inArray(DateOfOrder, holidayArray2013) > -1) {
console.log("is holiday");
}
See http://jsfiddle.net/mmeRD/