Я быстро написал фрагмент, который мне кажется хорошим.Я хочу сказать, что существует два типа национальных праздников: те, которые выпадают на один и тот же день каждый год (как Рождество), и те, которые выпадают на разные дни каждый год (например, на Пасху).Я не буду приводить здесь логику для расчета движущихся выходных, но мой фрагмент работает с массивом, который может иметь два типа выходных: month/day
(для статических) и month/day/year
(для смены).Вы можете сгенерировать этот массив так, как вам нужно.
Тест будет выполняться для этого массива, преобразует значения массива в объекты Date и использует jQuery inArray()
для поиска совпадений.
Основной код:
//an array of holidays, defined here, ajaxed or anything
var holidays=['12/24', '1/1', '5/10/2011', '5/25'];
//a function that decides whether a date is a holiday
function isHoliday(date, holidays) {
var parts, dateArray=[];
//build Dates from the array
for (var i=0; i<holidays.length; i++) {
parts=holidays[i].split('/');
if (parts.length==2) {
dateArray.push(new Date(date.getFullYear(), parts[0]-1, parts[1]).getTime());
} else if (parts.length==3) {
dateArray.push(new Date(holidays[i]).getTime());
} else {
return false;
}
}
return $.inArray(date.getTime(), dateArray)!=-1;
}
$('#fos').datepicker({
dateFormat: 'dd-mm-yy',
beforeShowDay: function(date){
//handling sundays
if (date.getDay() == 0) {
return [false];
}
//handling holidays
if (isHoliday(date, holidays)) {
return [false];
}
return [true];
}
});
И jsFiddle Demo .Успешно протестировано на Chrome и FF4.