我正在使用jQuery UI datepicker并且在beforeShowDay上使用noWeekends方法来禁用可选择的周末。与此同时,我想设置从今天起5和-5天的最小和最大日期。
我遇到的问题是,我不希望周末被包括在那5天内。我希望它是最短和最多5个可选日,而不是一般的日子。我只希望在min和maxdate范围内计算未禁用的日期。
示例:如果在过去45天内有2天禁用,则45的实际情况实际上是47(如果包含禁用日期)。
http://jsfiddle.net/corydorning/8mp5W/
// what I need
$('.date').datepicker({
maxDate: 5, // 5 selectable days
minDate: -5, // -5 selectable days
beforeShowDay: $.datepicker.noWeekends
});
注意:我正在寻找一个可以解决任何禁用日期的解决方案,而不仅仅是周末。我只是在周末使用这个例子,因为它是最容易表示的,并且内置于jQuery UI。
答案 0 :(得分:1)
编辑beforeShowDay
函数,如下所示:
$('.date').datepicker({
maxDate: 5,
minDate: -5,
beforeShowDay: function (date) {
var day = date.getDay();
//disable Tuesdays
return [(day != 2), ""];
}
});
请参阅此处的小提琴:http://jsfiddle.net/8mp5W/1/
使用该范例,您应该能够创建一个您不希望显示的日期列表(仅针对星期二等)。
我认为这可以解答您如何获得定制可用日期的能力的问题。
以下javascript设置minDate
从今天的日期向后计数,并跳过周末日期[0,6]
,因为它运行计数。它会在达到你想要的#天数时停止。
它可以提高效率,并且应该参数化等,但我会给你调整和定制。查找maxDate
将以相同的方式工作,但改为推进日期。
$(window).load(function(){
$('.date').datepicker({
minDate: findMin (),
beforeShowDay: $.datepicker.noWeekends
});
});
function findMin () {
var today = new Date();
var invalidWeekdays = [0,6]; //weekdays to disregard
var validDaysPrior = 5; //number of days to count back
var i = 0;
while (i < validDaysPrior) {
today.setDate(today.getDate()-1); //decrement day
console.log("today is", today);
var todayWeekday = today.getDay();
if ( jQuery.inArray(todayWeekday, invalidWeekdays) < 0 ) {
console.log(todayWeekday + " is valid");
i++;
} else {
console.log(todayWeekday + " is NOT valid");
}
}
console.log(validDaysPrior + " valid days ago occurred on " + today);
return today;
}
答案 1 :(得分:0)
您可以尝试以下代码:get_date()在我的代码中通过ajax进行调用。你可以创建一个数组。并在那里输入一个日期。
window.natDays = [];
$.ajax({
type : "POST",
async : false,
url : rootPath + '/get_date',
data : "ajax=true",
success : function(msg) {
var a = $.parseJSON(msg);
$i = 0;
$.each(a, function(key, value) {
arr = (value.Date['date']).split('-');
arr2[key] = new Array(value.Date['month'], arr[2],
value.Date['occassion']);
});
natDays = arr2;
}
});
var dateMaxforswitch = new Date();
dateMinforswitch.setDate(dateMinforswitch.getDate()
+ (dateMinforswitch.getHours() >= 17 ? 1 : 0));
dateMaxforswitch.setDate(dateMaxforswitch.getDate()
+ (dateMaxforswitch.getHours() >= 17 ? 1 : 0));
AddBusinessDays(dateMaxforswitch, 25);
function AddBusinessDays(curdate, weekDaysToAdd) {
while (weekDaysToAdd > 0) {
curdate.setDate(curdate.getDate() + 1);
// check if current day is business day
if (noWeekendsOrHolidays(curdate)[0]) {
weekDaysToAdd--;
}
}
}
function noWeekendsOrHolidays(date) {
var noWeekend = $.datepicker.noWeekends(date);
if (noWeekend[0]) {
return nationalDays(date);
} else {
return noWeekend;
}
}
function nationalDays(date) {
for (i = 0; i < natDays.length; i++) {// alert(natDays[i][2]);
if (date.getMonth() == natDays[i][0] - 1 && date.getDate() == natDays[i][1]) {
return [ false, natDays[i][2] + '_day' ];
}
}
return [ true, '' ];
}