在Jquery UI datepicker中启用第一个星期日

时间:2011-07-08 22:50:09

标签: jquery-ui datepicker jquery-ui-datepicker

我目前正在开发一个Jquery日期选择器,其中假期被禁用,所有星期日,除了每个月的第一个。我一直在努力尝试使用代码,并发现如何禁用所有星期日和假期,但我无法弄清楚如何启用evey月的第一个星期日。

目前我的代码如下:

<script type="text/javascript">
        (function(){

            var natDays = [[12, 24],[12, 25], [1,1], [12, 31]];
            var daysToDisable = [0];
            function nationalDays(date) {
                for (i = 0; i < natDays.length; i++) {
                    if (date.getMonth() == natDays[i][0] - 1
                    && date.getDate() == natDays[i][1]) {
                        return [false, natDays[i][2] + '_day'];
                    }
                }
                for (i = 0; i < daysToDisable.length; i++) {
                    if ($.inArray(day, daysToDisable) != -1) {
                        return [false];
                    }
                }
                return [true];
            }   
            // Datepicker
            $('#datepicker').datepicker({
                inline: true,
                firstDay: 1,
                changeYear: true,
                changeMonth: true,
                beforeShowDay: nationalDays,
            });
        });
</script>

2 个答案:

答案 0 :(得分:1)

从逻辑上讲,本月的第一个星期日总是之前第7天,而第二个星期日(以及之后的星期日)之后

function nationalDays(date) {
    for (i = 0; i < natDays.length; i++) {
        if (date.getMonth() == natDays[i][0] - 1 && date.getDate() == natDays[i][1]) {
            return [false, natDays[i][2] + '_day'];
        }
    }
    if (date.getDate() > 7 && $.inArray(date.getDay(), daysToDisable) != -1)
        return [false];
    }
    return [true];
}

我还建议将natDays数组的结构更改为平面数组,以加快查找速度。对于类前缀(在您的示例中未设置),您可以使用具有匹配索引的额外数组。你的最终功能如下:

var natDays = ["12-24", "12-25", "1-1", "12-31"];
var classPrefixes = ["", "", "", ""];
var daysToDisable = [0];

function nationalDays(date) {
    var index = $.inArray((date.getMonth() + 1) + "-" + date.getDate(), natDays);
    if (index != -1) {
        return [false, classPrefixes[index] + '_day'];
    }
    if (date.getDate() > 7 && $.inArray(date.getDay(), daysToDisable) != -1)
        return [false];
    }
    return [true];
}

答案 1 :(得分:0)

您正在寻找的方法是date.getDay(),它将返回0到6之间的数字,0表示星期日。

function nationalDays(date) {
    if(date.getDay() == 0) {
        // do stuff...