自定义jQuery UI日期选择器以限制日期

时间:2013-03-15 00:01:16

标签: jquery jquery-ui

我使用jQuery UI创建了一个自定义日期选择器: http://jsfiddle.net/u8fVj/

$("#input_custom_date").datepicker({
numberOfMonths: 2,
beforeShowDay: function(date) {
    //Get today's date
    var today = new Date();
    today.setHours(0,0,0,0);

    if (today.getDay() == 4 || today.getDay() == 5 || today.getDay() == 6) {
        //If today is Wednesday, Thursday, Friday don't allow Sunday to be selectable until the next week on Sunday.
        var disabledDate = new Date(today||new Date());
        disabledDate.setDate(disabledDate.getDate() + (0 - 1 - disabledDate.getDay() + 7) % 7 + 1);
        return [(date > today && date.getDay() == 0 && date.toString() != disabledDate.toString()), ''];
    }else if(today.getDay() == 0){
        //If today is Sunday, don't allow today to be selectable.
        var disabledDate = today;
        var curr_date = date.getDate();
        var curr_month = date.getMonth();
        var curr_year = date.getFullYear();
        var dDate = new Date(curr_year, curr_month, curr_date);
        return [(date > today && date.getDay() == 0 && dDate.toString() != disabledDate.toString()), ''];
    }else{
        //Everything is fine, allow all Sundays to be selectable
        var day = date.getDay();
        return [(date > today && day == 0), ''];
    }
}

});

现在用户应该只能在星期天选择日期。它需要检查并查看今天的日期是在即将到来的星期日之前的星期三,星期四或星期五,如果是,日期选择器应该禁用即将到来的星期日。同样,如果今天的日期是星期日,它应该在日期选择器中禁用。

但是,我不需要仅选择星期日,而是将日期选择器更改为仅允许星期一和星期二可选。如果今天的日期是星期四,星期五或星期六,它应该禁用即将到来的星期一和星期二。如果今天是星期一,它应该禁用当周的星期一和星期二。如果今天的日期是星期二,它应该只禁用今天的日期。

另外,我需要能够在特定日期投入禁用假期,这可能是硬编码的。

不确定如何超越我现在所拥有的,并感谢任何帮助。我一直试图让这个工作起来,并且不能让逻辑解决。

1 个答案:

答案 0 :(得分:1)

您基本上只需将.getDay() == 0支票移至.getDay() == 1 || .getDay() == 2,1和2即周一和周二。需要对disableDate

进行类似的比较
disabledDate.setDate(disabledDate.getDate() + (1 - 1 - disabledDate.getDay() + 7) % 7 + 1);

0 - 1更改为1 - 1(不需要,但为了清晰起见),以便获得星期一。 2 - 1产生于星期二。

至于处理特殊日期,您可以将它们存储在DOM中的<ul hidden>中并首先检查这些日期:

beforeShowDay: function(date) {
    //Get today's date
    var today = new Date(), specialDate = false;
    today.setHours(0,0,0,0);

    $(".special-dates li").each(function () {
        if ($(this).text() == today.toString()) {
            specialDate = true;
            return false;
        }
    });
    if (specialDate) {
        return [true, ''];
    }

http://jsfiddle.net/ExplosionPIlls/u8fVj/1/