#javascript #reactjs #typescript #momentjs
Вопрос:
как вернуть разницу в днях между 2 датами без учета праздников и выходных .
я провел выходные
export const workday_count = (start: moment.Moment, end: moment.Moment) => {
const first = start.clone().endOf('week');
const last = end.clone().startOf('week');
const days = (last.diff(first, 'days') * 5) / 7;
let wfirst = first.day() - start.day();
if (start.day() === 6) --wfirst;
let wlast = end.day() - last.day();
if (end.day() === 5) --wlast;
return wfirst Math.floor(days) wlast;
} ;
,но теперь мне нужно рассчитать разницу без праздников ,
например, у меня есть
const holidays=['2021-1-13','2021-1-14','2021-1-15','2021-1-16','2021-1-17','2021-1-18']
и дата начала '2021-1-10'
-это дата окончания 2021-1-20
, так что общее количество дней составляет 4 дня .
Ответ №1:
Здесь я нахожу решение для вас.
function getBusinessDateCount (startDate, endDate) {
var elapsed, daysBeforeFirstSaturday, daysAfterLastSunday;
var ifThen = function (a, b, c) {
return a == b ? c : a;
};
elapsed = endDate - startDate;
elapsed /= 86400000;
daysBeforeFirstSunday = (7 - startDate.getDay()) % 7;
daysAfterLastSunday = endDate.getDay();
elapsed -= (daysBeforeFirstSunday daysAfterLastSunday);
elapsed = (elapsed / 7) * 5;
elapsed = ifThen(daysBeforeFirstSunday - 1, -1, 0) ifThen(daysAfterLastSunday, 6, 5);
return Math.ceil(elapsed);
}
function calc() {
let start = document.querySelector('#startDate').value,
end = document.querySelector('#endDate').value,
result = getBusinessDateCount(new Date(start), new Date(end));
document.querySelector('#result').value = resu<
}
Start date: <input type="date" id="startDate" value="2020-01-04"><br>
End date: <input type="date" id="endDate" value="2020-01-06"><br>
<input type="button" onclick="calc()" value="Get business days"><br>
Business days: <input id="result" readonly>
Комментарии:
1. спасибо , но это справится с выходными , я уже справляюсь с выходными , но я хочу справиться с праздничными датами
2. постоянные праздники=[‘2021-1-13′,’2021-1-14′,’2021-1-15′,’2021-1-16′,’2021-1-17′,’2021-1-18’] holidays.map((пункт) => { если(пункт.между(дата начала, дата окончания))) {//здесь вы можете вычесть 1 из расчетного числа дней. Надеюсь, это вам поможет } })