0

我使用 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), ''];
    }
}

});

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

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

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

不知道如何超越我现在所拥有的,并希望得到任何帮助。我一直在努力让它发挥作用,但无法解决逻辑。

4

1 回答 1

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周二收益率。

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

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/

于 2013-03-15T00:20:37.360 回答