集中指定不登陆的日期

时间:2017-08-16 12:59:39

标签: javascript date

我有以下Javascript,显示未来的日期。有没有办法可以指定一个天的列表(WET),以便它不会降落?例如,如果日期是圣诞节,请自动加1(提供它仍然是工作日而不是另一个假期)?

以下是我正在使用的内容:

function addDates(startDate,noOfDaysToAdd){
  var count = 0;
  while(count < noOfDaysToAdd){
    endDate = new Date(startDate.setDate(startDate.getDate() + 1));
    if(endDate.getDay() != 0 && endDate.getDay() != 6){
       //Date.getDay() gives weekday starting from 0(Sunday) to 6(Saturday)
       count++;
    }
  }
  return startDate;
}

function convertDate(d) {
  function pad(s) { return (s < 10) ? '0' + s : s; }
  return [pad(d.getDate()), pad(d.getMonth()+1), d.getFullYear()].join('/');
}


var today = new Date();
var daysToAdd = 6;
var endDate = addDates(today,daysToAdd);
document.write(convertDate(endDate));

1 个答案:

答案 0 :(得分:0)

Add days to JavaScript Date中包含向日期添加天数。

为了避免周末(假设周六和周日,有些地方使用不同的日子,如周四和周五),您可以查看结果,如果当天是6(星期六)或0(星期日),则可以前进。同样,您可以使用格式化的日期字符串检查假期(比使用Date对象更容易)。

一个简单的算法是将所需的天数添加到某个日期,然后如果它在周末或假日出现,请一次添加一天,直到它没有。

// Utility functions
// Add days to a date
function addDays(date, days) {
  date.setDate(date.getDate() + days);
  return date;
}

// Return true if date is Sat or Sun
function isWeekend(date) {
  return date.getDay() == 0 || date.getDay() == 6;
}

// Return true if date is in holidays
function isHoliday(date) {
  return holidays.indexOf(formatISOLocal(date)) != -1;
}

// Show formatted date
function showDate(date) {
  return date.toLocaleString(undefined, {
    weekday:'long',
    day: 'numeric',
    month: 'long',
    year: 'numeric'
  });
}

// Return date string in YYYY-MM-DD format
function formatISOLocal(d) {
  function z(n){return (n<10? '0':'')+n}
  return d.getFullYear() + '-' + z(d.getMonth()+1) + '-' + z(d.getDate());
}

// Main function
// Special add days to avoid both weekends and holidays
function specialAddDays(date, days) {

  // Add days
  date.setDate(date.getDate() + days);
  
  // While date is a holiday or weekened, keep adding days
  while (isWeekend(date) || isHoliday(date)) {
    addDays(date, 1);
  }
  return date;
}

// Holidays      Tuesday      Wednesday     Eid al-Adha   Christmas
var holidays = ['2017-08-22','2017-08-23', '2017-09-01', '2017-12-25'];

// Examples
var d = new Date(2017,7,18,1,30);
console.log('Start day: ' + showDate(d)); // Friday
specialAddDays(d, 1);
console.log('Day added: ' + showDate(d)); // Monday

// Tue and Wed are (fake) holidays, so should return Thursday
specialAddDays(d, 1);
console.log('Day added: ' + showDate(d));