Сначала проверьте дату не в disabledDates
перед setDate для datepicker.
Просто проверьте дату не в disabledDates
в формате date
для строкового формата 'гггг-мм-дд' ( { ссылка }) и используйте функцию включения для проверки следующим образом.
dtf = new Intl.DateTimeFormat('en', { year: 'numeric', month: '2-digit', day: '2-digit' })
let [{ value: mo },,{ value: da },,{ value: ye }] = dtf.formatToParts(date)
let formatedDate = `${ye}-${mo}-${da}`
if(!disabledDates.includes(formatedDate)){
// not include in disabledDates; so assign date
}else{
// include in disabledDates; do nothing
}
, затем l oop, пока выбранная дата не будет включена в disabledDates
$('.next-day').on("click", function() {
var date = $('#picker').datepicker('getDate');
while (true) {
date.setTime(date.getTime() + (1000 * 60 * 60 * 24))
dtf = new Intl.DateTimeFormat('en', {
year: 'numeric',
month: '2-digit',
day: '2-digit'
})
let [{
value: mo
}, , {
value: da
}, , {
value: ye
}] = dtf.formatToParts(date)
let formatedDate = `${ye}-${mo}-${da}`
if (!disabledDates.includes(formatedDate)) {
break;
}
}
$('#picker').datepicker("setDate", date);
});
Вы можете сделать функция, которая находит следующую дату, которая не в disabledDates
, а код будет таким:
function findNextDateBySkipedDate(startDate, operation, skipedDates) {
let date = new Date(startDate.getTime()); // copy date to new object
while (true) {
if (operation === "+") {
date.setTime(date.getTime() + (1000 * 60 * 60 * 24))
} else if (operation === "-") {
date.setTime(date.getTime() - (1000 * 60 * 60 * 24))
} else {
break;
}
dtf = new Intl.DateTimeFormat('en', {
year: 'numeric',
month: '2-digit',
day: '2-digit'
})
let [{
value: mo
}, , {
value: da
}, , {
value: ye
}] = dtf.formatToParts(date)
let formatedDate = `${ye}-${mo}-${da}`
if (!skipedDates.includes(formatedDate)) {
break;
}
}
return date;
}
$('.next-day').on("click", function() {
var date = $('#picker').datepicker('getDate');
$('#picker').datepicker("setDate", findNextDateBySkipedDate(date, "+", disabledDates));
});
$('.prev-day').on("click", function() {
var date = $('#picker').datepicker('getDate');
$('#picker').datepicker("setDate", findNextDateBySkipedDate(date, "-", disabledDates));
});