2013-03-15 114 views
0

我做了一个自定义的日期选择器: http://jsfiddle.net/u8fVj/定制jQuery UI的日期选择器来限制使用jQuery UI日期

$("#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

您基本上需要将.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/

+0

由于爆炸!因此,如果“今天”是星期一或星期二,我需要在星期一和星期二屏蔽掉。换句话说,如果“今天”是星期二,它会以同样的方式在星期一显示;周一和周二都会阻止。那有意义吗? 此外,我还不清楚如何在检查周一和周二时如何将特殊日期放入回复日期。 – Keith 2013-03-15 06:29:26

+0

我认为*如果“今天”是那两天中的任何一天,这可能会按照我上面描述的禁用星期一和星期二的方式工作?不知道它是否是最有效的。 也放在UL与特殊的日期,并不能得到它的工作,如果你可以帮助: http://jsfiddle.net/w4dMq/ – Keith 2013-03-15 06:41:40