如果我输入 startDate 和 endDate,我需要找到天数.从 start_date 到 end_date 我只想检索工作日,即星期一到星期五以及offcial_leave变量 for_example:
let numberOfdays;
let startDate = '2022-04-04'; //yy-mm-dd format
let endDate = '2022-04-08';
// Below variable come from db and vary according the start and endate
// eg:- 2022-12-25 will be holiday if we select start and end in december
let holidays = ['2022-04-05', '2022-04-07' ]
numberOfdays => 3
// I want to return number of days to 3
如何在 JavaScript 中实现这一点
谢谢
首先将startDate
和endDate
转换为javascriptDate
。然后,声明一个变量i
在循环访问日期时存储。此外,声明holidayIndex
,它存储当前索引,需要将假日日期与当前日期进行检查。
在循环中,将日期转换为YYYY-MM-DD
格式(原始格式)以检查当前日期(isoDate
)是否位于假日之间,即它不是假日日期。如果 holidayIndex 是数组的最后一个索引,那么只需检查当前日期 (isoDate
) 是否不在 holidays 数组中。如果未找到,则递增numberOfDays
变量。
否则,将找到假日日期,因此无需递增numberOfDays
。只需递增holidayIndex
即可准备好匹配下一个假期日期的即将到来的日期。
这是解决方案:
let numberOfdays = 0;
const startDate = '2022-04-04'; //yy-mm-dd format
const endDate = '2022-04-08';
// Below variable come from db and vary according the start and endate
// eg:- 2022-12-25 will be holiday if we select start and end in december
const holidays = ['2022-04-05', '2022-04-07'];
let holidayIndex = 0;
const start = new Date(startDate);
const end = new Date(endDate);
let i = start;
while (i <= end) {
const isoDate = i.toISOString().split('T')[0];
if (
(holidayIndex < holidays.length - 1 && isoDate < holidays[holidayIndex] && isoDate > holidays[holidayIndex + 1]) ||
formattedDate !== holidays[holidayIndex]
) {
numberOfdays += 1;
} else {
holidayIndex += 1;
}
i.setDate(i.getDate() + 1);
}