jQuery 日期选择器 - 将范围限制为提前 7 个工作日(不包括周末)

jQuery Datepicker - Limit range to 7 WORKING days ahead (Excluding weekends)

正如标题所说,我正在尝试让 jQuery 日期选择器允许用户从接下来的 7 个工作日开始 select 日期。我到处搜索解决方案,但我找到的最接近的是可以 selected 的最早日期是从今天起 x 天。我需要限制 select 可用范围。

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

所以日期选择器应该只允许 2 号(星期二)、3 号(星期三)、4 号(星期四)、5 号(星期五)、8 号(星期一)、9 号(星期二)和 10 号(星期三)。

显然这些只是示例日期,我想要任何当前日期。

我的代码如下;

<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>

如有任何帮助,我们将不胜感激:-)

马特

您可以使用 maxdate 并定义 +x 天,无需自定义 javascript。只需使用编程的功能

maxDate: '+9D'

用于 mindate 使用 -0

minDate: '+1D'

跳过周末

beforeShowDay: $.datepicker.noWeekends

更新 fiddle 来自其他用户 http://jsfiddle.net/wQe8c/914/

这是一个有效的 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;
}

然后像下面这样初始化日期选择器:

$(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
       }); 
  });

在这种情况下,您想知道必须将多少天添加到日期选择器。我做了一个函数,根据星期几计算天数。

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 参数添加到您的日期选择器对象。同时设置 minDate: 1, 以便排除 "today".

完整代码: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
    });

});