как рассчитать разницу между датой начала и датой окончания без праздников ? язык JavaScript

#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 из расчетного числа дней. Надеюсь, это вам поможет } })