1

非常感谢您花时间阅读。我有一个允许预订和选择日期的日历,但我需要禁用特定的工作日、月份,以及某些旅行的第三个星期五或第二个星期二。所以我有@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 中将所有这些功能结合在一起,但能够选择具有这些限制的旅行。"days to disable" 和 "months to disable" 函数已准备好并可以使用以下变量:

var daysToDisable = [1, 4, 6];
var monthsToDisable = [9];

而且我希望有可能以相同的方式禁用特定的工作日:

var specificdaysToDisable = []

此外,如果有更好的编码可能性,那么我将能够在第三个星期五停用一次旅行,第二个星期二停用另一次旅行,那么我愿意接受建议。

先感谢您!

4

2 回答 2

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]
}

演示:http: //jsfiddle.net/IrvinDominin/yFtLP/11/

于 2013-08-27T18:03:28.810 回答
0

我认为这将是最终代码,但我也愿意接受建议,因为我不确定它的语法是否正确,或者是否有其他方法可以改进代码。

同样在Fiddle带有 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]
}
于 2013-08-27T18:56:43.093 回答