非常感谢您花时间阅读。我有一个日历,允许预订和选择日期,但我需要禁用特定的工作日,几个月,但也需要在某些旅行的第三个星期五或第二个星期二。所以我有@Thierry J.帮助我清理的这些功能,但是我需要将它加入到最后一个功能中(仅在星期五,或星期二,等等时激活)。
var daysToDisable = [1, 4, 6];
var monthsToDisable = [9];
function disableSpecificWeekDays(date) {
var day = date.getDay();
if ($.inArray(day, daysToDisable) != -1) {
return [false];
}
var month = date.getMonth();
if ($.inArray(month, monthsToDisable) != -1) {
return [false];
}
return [true];
}
为了激活所选月份的第三个星期五,我有这个功能:
var day = date.getDay();
var date = date.getDate();
return [(day == 5 && date >= 15 && date <= 21), ''];
所以我想知道是否可以在beforeShowDay中将所有这些功能放在一起,但是能够选择具有这些限制的行程。 “禁用日期”和“禁用月数”功能已准备就绪,可以使用这些变量:
var daysToDisable = [1, 4, 6];
var monthsToDisable = [9];
我希望有可能以特定方式禁用特定的工作日:
var specificdaysToDisable = []
此外,如果有更好的可能性进行编码,那么我将能够停用一个星期五的第一个旅行,第二个星期二的另一个旅行,然后我愿意接受建议。
提前谢谢!
答案 0 :(得分:2)
要知道是否是第三周而不是检查日期不在14到22之间,您可以编写自己的Date.prototype.getWeekOfMonth
函数来获取月份的周数,然后使用它来检查条件。
代码:
Date.prototype.getWeekOfMonth = function(exact) {
var month = this.getMonth()
, year = this.getFullYear()
, firstWeekday = new Date(year, month, 1).getDay()
, lastDateOfMonth = new Date(year, month + 1, 0).getDate()
, offsetDate = this.getDate() + firstWeekday - 1
, index = 1 // start index at 0 or 1, your choice
, weeksInMonth = index + Math.ceil((lastDateOfMonth + firstWeekday - 7) / 7)
, week = index + Math.floor(offsetDate / 7)
;
if (exact || week < 2 + index) return week;
return week === weeksInMonth ? index + (weeksInMonth -1 ) : week;
};
jQuery("#datepicker").datepicker({
beforeShowDay: disableSpecificWeekDaysandMonths,
});
var daysToDisable = [0, 2, 3, 4, 6];
var monthsToDisable = [1, 2];
var specificDaysToDisable = [5];
function disableSpecificWeekDaysandMonths(date) {
var day = date.getDay();
if ($.inArray(day, daysToDisable) != -1) {
return [false];
}
var month = date.getMonth();
if ($.inArray(month, monthsToDisable) != -1) {
return [false];
}
var date2 = date.getDate();
var inArray = $.inArray(day, specificDaysToDisable)
if (inArray != -1 && date.getWeekOfMonth()!=3) {
return [false];
}
return [true]
}
答案 1 :(得分:0)
我认为这将是最终的代码,但我也愿意接受建议,因为我不确定它的语法是否正确,或者是否有其他方法可以改进代码。
同样位于Fiddle和short version with inArray var。
jQuery("#datepicker").datepicker({
beforeShowDay: disableSpecificWeekDaysandMonths,
});
var daysToDisable = [0, 2, 3, 4, 6];
var monthsToDisable = [1, 2 ];
var specificDaysToDisable = [5];
function disableSpecificWeekDaysandMonths(date) {
var day = date.getDay();
if ($.inArray(day, daysToDisable) != -1) {
return [false];
}
var month = date.getMonth();
if ($.inArray(month, monthsToDisable) != -1) {
return [false];
}
var date2 = date.getDate();
if ($.inArray(day, specificDaysToDisable) != -1 && date2 <= 14 || $.inArray(day, specificDaysToDisable) != -1 && date2 >= 22 ) {
return [false];
}
return [true]
}