如何使用beforeShowDay方法在每个datepicker范围年份中禁用不同的月份

时间:2014-01-09 21:10:57

标签: javascript jquery date datepicker

我想在每个datepicker年份中禁用不同的月份,特别是开始年份和结束年份。我知道我可以使用beforeShowDay方法运行一些可以返回true和false的代码来启用/禁用日期。现在我想禁用2005年9月 - 12月以及2009年11月和12月的月份,但我不完全确定如何做到这一点。

当我退出date.getYear()时,我会得到像104和105这样的数字,当我期望得到2014年和2015年等时,所以我不确定如何检查年份然后继续并设置真/基于我创建的最小和最大数组的错误值,它将保留我想要排除的月份。

JS

var minYear = 2005,
    maxYear = 2009,
    excludeMinYearMonths = [8, 9, 10, 11],
    excludeMaxYearMonths = [10, 11];

    $("#datepicker").datepicker({
        changeMonth: true,
        changeYear: true,
        yearRange: minYear + ':' + maxYear,
        beforeShowDay: function (date) {

            console.log(date.getYear());

            if (date.getYear() === minYear) {
                if ($.inArray(date.getMonth(), excludeMinYearMonths) > -1) {
                    return [false, ''];
                }
                return [true, ''];
            }

            if (date.getYear() === maxYear) {
                if ($.inArray(date.getMonth(), excludeMaxYearMonths) > -1) {
                    return [false, ''];
                }
                return [true, ''];
            }

        },
        defaultDate: '01/01/05'
    });

Jsfiddle: http://jsfiddle.net/qA9NT/18/

1 个答案:

答案 0 :(得分:1)

您可以先阅读getYear()的文档。在那里,您将看到为什么使用getFullYear()

  

getYear() 方法在指定日期返回年份减去1900   到当地时间。由于 getYear() 没有返回完整年份,因此不再使用它,并且已被替换为    getFullYear() 方法。

此外,您忘记为非排除日期定义默认行为。

var minYear = 2005, maxYear = 2009, excludedMonths = {
    2005: [8, 9, 10, 11],
    2009: [10, 11]
};

$("#datepicker").datepicker({
    changeMonth: true,
    changeYear: true,
    yearRange: minYear + ':' + maxYear,
    beforeShowDay: function (date) {
        if (excludedMonths.hasOwnProperty(date.getFullYear())) {
            if ($.inArray(date.getMonth(), excludedMonths[date.getFullYear()]) > -1) {
                return [false, ''];
            }
        }
        return [true, ''];
    },
    defaultDate: '01/01/05'
});

Check the updated live example.