使用JS / jQuery计算未来的日期,跳过周末和假期

时间:2016-09-07 15:42:33

标签: javascript jquery date jquery-ui

我正在尝试让此脚本在未来显示3个日期,如果客户今天订购,则估算到达时间。在广告和主页上,我想在未来4,10和12个工作日显示,格式为“1月12日星期一”,以便客户了解他们何时可以获得他们的标签。

我将来可以获得三个日期,但不能计算周末或“假日日期数组”中的任何日期,

我需要计算未来4个月,10个月和12个工作日。但下面显示的代码是计算天数而不会跳过周末或假期。

我做错了什么?

我目前的JS / jQuery代码:

var natDays = [
[1, 1, 'New Year'], 
[1, 20, 'Martin Luther King'], 
[2, 17, 'Washingtons Birthday'],       
[5, 26, 'Memorial Day'],
[7, 4, 'Independence Day'], 
[9, 12, 'Labour Day'],
[10, 14, 'Columbus Day'],
[11, 11, 'Veterans Day'],
[11, 28, 'Thanks Giving Day'], 
[12, 25, 'Christmas']   
];

// dateMin is the minimum delivery date
var dateMin = new Date();
dateMin.setDate(dateMin.getDate() + (dateMin.getHours() >= 14 ? 1 : 0));

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

function noWeekendsOrHolidays(date) {
  var noWeekend = jQuery.datepicker.noWeekends(date);
  return (noWeekend[0] ? nationalDays(date) : 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, ''];
}
function setDeliveryDate(date) {
  jQuery('#normal-date').text(jQuery.datepicker.formatDate('DD, MM dd', date));
}
function setRushDeliveryDate(date) {
  jQuery('#rush-date').text(jQuery.datepicker.formatDate('DD, MM dd', date));
}function setSuperDeliveryDate(date) {
  jQuery('#superrush-date').text(jQuery.datepicker.formatDate('DD, MM dd', date));
}
setDeliveryDate(AddBusinessDays(dateMin, 12));
setRushDeliveryDate(AddBusinessDays(dateMin, 10));
setSuperDeliveryDate(AddBusinessDays(dateMin, 4));
;

HTML:

<p class="delvdate">Guaranteed by <span id="normal-date"></span>*</p>
<p class="delvdate">Guaranteed by <span id="rush-date"></span>*</p>
<p class="delvdate">Guaranteed by <span id="superrush-date"></span>*</p>

Codepen with current code

0 个答案:

没有答案