Datepicker not excluding weekends as it should be
Hello,
I'm using the jQuery ui datepicker and it's supposed to be excluding weekends but doesn't seem to be doing that.
Please help.
Thanks!
Susan
- //datepicker
var natDays = [
[1, 1, 'New Year'], //2014
[1, 20, 'Martin Luther King'], //2014
[2, 17, 'Washingtons Birthday'], //2014
[5, 26, 'Memorial Day'], //2014
[7, 4, 'Independence Day'], //2014
[9, 1, 'Labour Day'], //2014
[10, 14, 'Columbus Day'], //2013
[11, 11, 'Veterans Day'], //2013
[11, 28, 'Thanksgiving Day'], //2013
[12, 25, 'Christmas'] //2013
];
// dateMin is the minimum delivery date
var dateMin = new Date();
dateMin.setDate(dateMin.getDate() + (dateMin.getHours() >= 14 ? 1 : 0));
function AddBusinessDays(curdate, weekDaysToAdd) {
var offset = (weekDaysToAdd > 0 ? +1 : -1);
weekDaysToAdd = Math.abs(weekDaysToAdd);
var date = new Date(curdate.getTime());
while (weekDaysToAdd > 0) {
date.setDate(date.getDate() + offset);
//check if current day is business day
if (noWeekendsOrHolidays(date)) {
weekDaysToAdd--;
}
}
return date;
}
function noWeekendsOrHolidays(date) {
var noWeekend = $.datepicker.noWeekends(date);
return (noWeekend[0] ? nationalDays(date) : noWeekend);
}
function nationalDays(date) {
for (i = 0; i < natDays.length; i++) {
if (date.getMonth() == natDays[i][0] - 1 && date.getDate() == natDays[i][1]) {
return [false, natDays[i][2] + '_day'];
}
}
return [true, ''];
}
function setDeliveryDate(date) {
$('#delivery-date').text($.datepicker.formatDate('DD, MM d, yy', date));
$('#datepicker3').text($.datepicker.formatDate('DD, MM d, yy',
AddBusinessDays(date, -1)));
$('#datepicker2').text($.datepicker.formatDate('DD, MM d, yy',
AddBusinessDays(date, -2)));
}
setDeliveryDate(AddBusinessDays(dateMin, 4));
$.datepicker.setDefaults({
beforeShowDay: noWeekendsOrHolidays,
showOn: 'both',
firstDay: 0,
dateFormat: 'mm/dd/yy',
changeFirstDay: false,
showButtonPanel: true
});
// use datepicker to choose a different delivery date
$('#datepicker').datepicker({
minDate: AddBusinessDays(dateMin, 4),
onSelect: function(datestring) {
setDeliveryDate($(this).datepicker('getDate'));
}
});