选择日期后添加天数(周末和节假日除外)

inp*_*put 5 jquery jquery-ui datepicker

我有两个文本字段。在第一个文本字段中,我使用 jQueryUI Datepicker 添加了一个日历。当用户从日期选择器中选择日期时,它应该自动将 30 天添加到日期并在第二个文本字段中设置此值。我有这个工作来增加 30 天的日期。

但是,它应该排除周末和节假日,只显示 30 个工作日。我该怎么做呢?

if ($('#cat option:selected').text() == "ABC") {
    var date_billed = $('#datebilled').datepicker('getDate');
    var date_overdue = new Date();
    date_overdue.setDate(date_billed.getDate() + 30);
    date_overdue = $.datepicker.formatDate('mm/dd/yy', date_overdue);
    $('#datepd').val(date_overdue).prop('readonly', true);
}
Run Code Online (Sandbox Code Playgroud)

更新:我添加了 noWeekendsOrHolidays 函数来禁用周末或假期。无论如何我可以使用此功能来计算日期并将工作日添加到日期中吗?

//holidays
            var natDays = [
              [7, 4, 'us']
            ];

            function noWeekendsOrHolidays(date) {
                var noWeekend = $.datepicker.noWeekends(date);
                if (noWeekend[0]) {
                    return nationalDays(date);
                } else { 
                    return noWeekend;
                }
            }
            function nationalDays(date) {
                for (i = 0; i < natDays.length; i++) {
                    if (date.getMonth() == natDays[i][0] - 1 && date.getDate() == natDays[i][1]) {
                        return [false, natDays[i][2] + '_day'];
                    }
                }
                return [true, ''];
            }
Run Code Online (Sandbox Code Playgroud)

inp*_*put 5

解决了!这个答案在这里有很大帮助。

代码:

function AddBusinessDays(weekDaysToAdd) {
      var curdate = new Date();
      var realDaysToAdd = 0;
      while (weekDaysToAdd > 0){
        curdate.setDate(curdate.getDate()+1);
        realDaysToAdd++;
        //check if current day is business day
        if (noWeekendsOrHolidays(curdate)[0]) {
          weekDaysToAdd--;
        }
      }
      return realDaysToAdd;

    }


var date_billed = $('#datebilled').datepicker('getDate');
var date_overdue = new Date();
var weekDays = AddBusinessDays(30);
date_overdue.setDate(date_billed.getDate() + weekDays);
date_overdue = $.datepicker.formatDate('mm/dd/yy', date_overdue);
$('#datepd').val(date_overdue).prop('readonly', true);
Run Code Online (Sandbox Code Playgroud)