我有以下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));
答案 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));