我正在为一位朋友开店。他们非常具体的运输标准,我需要使用datepicker。唯一的周一,周三和周五。此外,在这些日子的每个中午12点,选择器需要将下一个可用日期更改为下一个星期一。星期三,。或周五示例:如果是星期三中午12点,最快的人可以选择作为日期的是下一个星期一。那个星期五下午12点将无法使用。
我找到了应该添加此功能的代码片段,但不知道如何将它们添加到我当前用于使更改生效的代码中。
这是我目前的代码:
jQuery(function() {
jQuery("#date").datepicker( {
beforeShowDay: nonWorkingDates,
numberOfMonths: 1,
minDate: +2,
maxDate: '+6M',
firstDay: 1
});
function nonWorkingDates(date){
var day = date.getDay(), Sunday = 0, Monday = 1, Tuesday = 2, Wednesday = 3, Thursday = 4, Friday = 5, Saturday = 6;
var closedDates = [[7, 29, 2009], [8, 25, 2010]];
var closedDays = [[Tuesday], [Thursday], [Saturday], [Sunday]];
for (var i = 0; i < closedDays.length; i++) {
if (day == closedDays[i][0]) {
return [false];
}
}
for (i = 0; i < closedDates.length; i++) {
if (date.getMonth() == closedDates[i][0] - 1 &&
date.getDate() == closedDates[i][1] &&
date.getFullYear() == closedDates[i][2]) {
return [false];
}
}
return [true];
}
]);
请尽可能具体说明。我是一个代码菜鸟。我可以复制并粘贴到特定位置的东西是理想的。
答案 0 :(得分:0)
基本上,您只需要确定传入的日期是否是下一个交付日。如果是,并且它已经过了中午,则禁用该日期。我相信拥有更多经验的人可以更优雅地做到这一点,但我的出现至少在今天工作(周三,过去中午,并且周五黑了)。
jQuery(function () {
jQuery("#date").datepicker({
beforeShowDay: nonWorkingDates,
numberOfMonths: 1,
minDate: +2,
maxDate: '+6M',
firstDay: 1
});
function nonWorkingDates(date) {
var day = date.getDay(),
Sunday = 0, Monday = 1, Tuesday = 2, Wednesday = 3,
Thursday = 4, Friday = 5, Saturday = 6;
var closedDates = [ [7, 29, 2009], [8, 25, 2010] ];
var closedDays = [
[Tuesday], [Thursday], [Saturday], [Sunday]
];
for (var i = 0; i < closedDays.length; i++) {
if (day == closedDays[i][0]) {
return [false];
}
}
for (i = 0; i < closedDates.length; i++) {
if (date.getMonth() == closedDates[i][0] - 1 && date.getDate() == closedDates[i][1] && date.getFullYear() == closedDates[i][2]) {
return [false];
}
}
var currentDay = new Date();
//if it's not past noon, we don't need to do the next check
//so return true
var currentHour = currentDay.getHours();
if (currentHour < 12) {
return [true];
}
//determine if the date passed in is the next delivery day
var nextDeliveryDay = 0
switch (date.getDay()) {
case 1:
nextDeliveryDay = 3;
break;
case 3:
case 5:
nextDeliveryDay = 2;
break;
}
//if date minus the number of days to the next delivery date
//equals today's date, then return false
var testDate = new Date(date);
testDate.setDate(testDate.getDate() - nextDeliveryDay);
//normalize the time of day for comparison
currentDay.setHours(0,0,0,0);
if (testDate.getTime() == currentDay.getTime()) {
return[false];
}
return [true];
}
});