我正在尝试将日期设置为从今天开始算起的 7 个工作日(不包括周末和英国公共(public)假期)。
- 我首先将默认日期设置为今天的日期 (todaysDate) + 7 天 (todayPlusSevenDays)
- 然后我计算 todaysDate 和 todayPlusSevenDays 之间的周末天数 如果我找到任何我将它们添加到 todayPlusSevenDays
- 然后我检查公共(public)假期,如果我找到任何公共(public)假期,我也会添加它们
执行这些检查后,我现在已将额外的天数添加到我的默认日期 - 如何检查新的天数范围是否包含周末或公共(public)假期?
例如,如果默认日期变成周末或银行假日,它还应该增加更多天数(现在没有)。
到目前为止,这是我的代码: https://jsfiddle.net/7yxna052/
function prepopulateDropdown() {
var todaysDate = new Date(),
tempNewDate = new Date(),
todayPlusSevenDays,
numberOfWeekends,
todayPlusSevenDaysPlusWeekends,
currentHour = todaysDate.getHours(),
holidayCount = 0,
weekendDayCount = 0,
ukHolidays = ['2017-05-12','2017-05-29','2017-08-28','2017-12-25','2017-12-26'];
// check if current time < or > 6pm GMT
function setDefaultdDate(){
if(currentHour >= 18){
todayPlusSevenDays = new Date(tempNewDate.setDate(tempNewDate.getDate() + 7));
}
else{
todayPlusSevenDays = new Date(tempNewDate.setDate(tempNewDate.getDate() + 6));
}
}
setDefaultdDate();
// Weekend day count
function calculateWeekendDays(startDate, endDate){
while(startDate < endDate){
startDate.setDate(startDate.getDate() + 1);
if(startDate.getDay() === 0 || startDate.getDay() == 6){
++weekendDayCount ;
}
}
return weekendDayCount;
}
calculateWeekendDays(todaysDate, todayPlusSevenDays);
todayPlusSevenDaysPlusWeekends = new Date(tempNewDate.setDate(tempNewDate.getDate() + weekendDayCount));
// count UK bank holidays within todayPlusSevenDays
function calculateBankHolidays(startDate, endDate){
startDate.setHours(0,0,0,0);
endDate.setHours(0,0,0,0);
for(i=0; i < ukHolidays.length; i++){
ukHolidaysFormated = new Date(ukHolidays[i]).setHours(0,0,0,0);
d = new Date(ukHolidays[i]).getDay();
if (ukHolidaysFormated >= startDate && ukHolidaysFormated <= endDate && !(d == 0 || d == 6)) {
holidayCount++;
}
}
return holidayCount;
}
calculateBankHolidays(todaysDate, todayPlusSevenDaysPlusWeekends);
todayPlusSevenDaysPlusWeekends = new Date(todayPlusSevenDaysPlusWeekends.setDate(todayPlusSevenDaysPlusWeekends.getDate() + holidayCount));
// set date to prepopulate
var today = new Date();
var year = todayPlusSevenDaysPlusWeekends.getFullYear();
var month = '0' + (todayPlusSevenDaysPlusWeekends.getMonth() + 1);
var day = todayPlusSevenDaysPlusWeekends.getDate();
$('.slctDay option').each(function(){
if($(this).val() == day){
$(this).attr('selected','selected');
}
});
$('.slctMonth option').each(function(){
if($(this).val() == month){
$(this).attr('selected','selected');
}
});
$('.slctYear option').each(function(){
if($(this).val() == year){
$(this).attr('selected','selected');
}
});
}
最佳答案
这是@andi 所谈论内容的示例。我把它作为一个计算器对象。
var calculator = {
workDaysAdded: 0,
ukHolidays: ['2017-05-12','2017-05-29','2017-08-28','2017-12-25','2017-12-26'],
startDate: null,
curDate: null,
addWorkDay: function() {
this.curDate.setDate(this.curDate.getDate() + 1);
if(this.ukHolidays.indexOf(this.formatDate(this.curDate)) === -1 && this.curDate.getDay() !== 0 && this.curDate.getDay() !== 6) {
this.workDaysAdded++;
}
},
formatDate: function(date) {
var day = date.getDate(),
month = date.getMonth() + 1;
month = month > 9 ? month : '0' + month;
day = day > 9 ? day : '0' + day;
return date.getFullYear() + '-' + month + '-' + day;
},
getNewWorkDay: function(daysToAdd) {
this.startDate = new Date();
this.curDate = new Date();
this.workDaysAdded = 0;
while(this.workDaysAdded < daysToAdd) {
this.addWorkDay();
}
return this.curDate;
}
}
var newWorkDay7 = calculator.getNewWorkDay(7);
var newWorkDay9 = calculator.getNewWorkDay(9);
var newWorkDay14 = calculator.getNewWorkDay(14);
console.log(newWorkDay7);
console.log(newWorkDay9);
console.log(newWorkDay14);
关于javascript - 将日期设置为从今天开始的 7 个工作日(不包括周末和公共(public)假期),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43767479/