jQuery Datepicker - 限制范围提前7个工作日(不包括周末)

时间:2015-12-07 12:06:04

标签: jquery jquery-ui-datepicker

正如标题所说,我试图让jQuery Datepicker允许用户选择接下来7个工作日的日期。我到处寻找解决方案,但我发现的最接近的地方是可以选择的最早日期是从今天开始的x天。我需要限制可选范围。

因此,例如,如果今天是星期一,那么我希望范围是第2到第10,因为我不想包括星期六或星期日。

所以Datepicker应该只允许第二(星期二),第三(星期三),第四(星期四),第五(星期五),第八(星期一),第九(星期二)和十(星期三)。

显然这些只是示例日期,我希望它们适用于任何当前日期。

我的代码如下;

<script>
$(function () 
    {
       var date = new Date();
       var currentMonth = date.getMonth();
       var currentDate = date.getDate();
       currentDate = currentDate;
       var currentYear = date.getFullYear();

       $('#datepicker2').datepicker(
       {
        dateFormat: "yy-mm-dd",
        beforeShowDay: $.datepicker.noWeekends,
        minDate: new Date(currentYear, currentMonth, currentDate)
       }); 
  });
  </script>

任何帮助将不胜感激: - )

3 个答案:

答案 0 :(得分:1)

你可以使用maxdate和define + x天,不需要自定义的javascript。只需使用编程的功能

maxDate: '+9D'

请注意使用-0

minDate: '+1D'

跳过周末

beforeShowDay: $.datepicker.noWeekends

从其他用户http://jsfiddle.net/wQe8c/914/

更新小提琴

答案 1 :(得分:0)

这是一个有效的fiddle

定义一个功能,仅将工作日添加到特定日期,不包括周末。

function addWeekdays(date, days) {
    date.setDate(date.getDate());
    var counter = 0;
        if(days > 0 ){
            while (counter < days) {
                date.setDate(date.getDate() + 1 ); // Add a day to get the date tomorrow
                var check = date.getDay(); // turns the date into a number (0 to 6)
                    if (check == 0 || check == 6) {
                        // Do nothing it's the weekend (0=Sun & 6=Sat)
                    }
                    else{
                        counter++;  // It's a weekday so increase the counter
                    }
            }
        }
    return date;
}

然后初始化datepicker,如下所示:

$(function () {
       var date = new Date();
       var currentMonth = date.getMonth();
       var currentDate = date.getDate();
       currentDate = currentDate;
       var currentYear = date.getFullYear();
       var maxDate = addWeekdays(date, 7);

       $('#datepicker2').datepicker({
         dateFormat: "yy-mm-dd",
         beforeShowDay: $.datepicker.noWeekends,
         minDate: new Date(currentYear, currentMonth, currentDate),
         maxDate: maxDate
       }); 
  });

答案 2 :(得分:0)

在这种情况下,您想知道必须添加到datepicker的天数。我做了一个函数,根据星期几计算天数。

function getNext7WorkingDays(){
    var d = new Date();
    var day = d.getDay();
    if(day>=0 && day<=3) return 9;
    else if(day!=6) return 10;
    else return 11;
}

它是如何工作的?如果今天是星期日(0),星期一(1),星期二(2)或星期三(3)你想加9天。如果它是星期四(4)或星期五(5),11。如果它是星期六(6),你想增加10天。如果你愿意,你可以自己做数学。

然后,您只需将beforeShowDay: $.datepicker.noWeekends参数添加到datepicker对象。同时设置minDate: 1,,以便排除“今天”。

完整代码:http://jsfiddle.net/oyy2reuf/

$(function() {

  function getNext7WorkingDays(){
    var d = new Date();
    var day = d.getDay();
    if(day>=0 && day<=3) return 9;
    else if(day!=6) return 10;
    else return 11;
  }
    $("#datepicker").datepicker( { 
      minDate: 1,
      dateFormat: 'dd/mm/yy', 
      maxDate: '+'+getNext7WorkingDays()+'D',  
      beforeShowDay: $.datepicker.noWeekends
    });

});