首页 > 解决方案 > 根据日期选择器选择计算新日期

问题描述

我有一个 jQuery Datepicker 和一个下拉选择器,其中国家代表需要添加到用户选择日期的额外天数。

我需要一个显示结果日期的输出。计算需要排除周末和银行假期,就像日期选择器所做的那样。

// holidays
var natDays = [
  [1, 1, 'uk'],
  [12, 25, 'uk'],
  [12, 26, 'uk']
];

var dateMin = new Date();
var weekDays = AddBusinessDays(0);

dateMin.setDate(dateMin.getDate() + weekDays);

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

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, ''];
}

$('#datepicker').datepicker({
  inline: true,
  beforeShowDay: noWeekendsOrHolidays,
  altField: '#txtCollectionDate',
  showOn: "both",
  dateFormat: "dd/mm/yy",
  firstDay: 1,
  changeFirstDay: false,
  minDate: dateMin
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.min.js"></script>
<link rel="stylesheet" href="https://code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css" />
<select id="weeks-select">
  <option value="10">UK</option>
  <option value="20">Overseas</option>
  <option value="30">India</option>
</select>
<input type="text" id="datepicker" />

标签: javascriptjquery

解决方案


推荐阅读