Как получить количество дней (пересечение) между двумя диапазонами дат / Количество дней, пересекающихся между двумя диапазонами дат в Javascript / Moment

#javascript #ecmascript-6 #momentjs

#javascript #ecmascript-6 #momentjs

Вопрос:

TotalStartDate: 01/28 TotalEndDate: 02/22

и у меня есть массив дат, таких как

ДАННЫЕ:

 StartDate2:01/27 endDate2:02/02
StartDate2:02/03 endDate2:02/09
StartDate2:02/10 endDate2:02/16
StartDate2:02/17 endDate2:02/23


dateRanges=[
{"startDate":01/27,"EndDate":02/02}
{"startDate":02/03,"EndDate":02/09}
{"startDate":02/10,"EndDate":02/16}
{"startDate":02/17,"EndDate":02/23}
]
  

теперь мне нужно, чтобы ни один день не соответствовал диапазону данных в начальном диапазоне дат

[0] диапазон индексных данных начинается с 27.01.2010, а TotalStartDate — с 28.01.2010, поэтому 1 день потрачен впустую, и в качестве подсчета должно быть получено только 6 дней

[1] диапазон индексных данных начинается с 03.02, а TotalStartDate — с 28.01 Все даты диапазона индексных данных [1] входят в TotalStartDate и TotalEndDate, поэтому количество должно быть 7

[2] количество 7

[3] количество 6 как enddate больше, чем totalEndDate .

Комментарии:

1. Пожалуйста, опубликуйте точный массив для ясности

Ответ №1:

Это то, что вы ищете?

Алгоритм, который мы можем использовать для достижения этого:

  • давайте рассмотрим, что у нас есть массив dateRanges, inputStartDate, inputEnddate в качестве входных данных.
  • Мы должны выполнить итерацию через наш массив dateRanges, чтобы мы могли вычислять дни на основе условий.
  • Давайте вычислим, какую начальную дату следует учитывать ( это StartDate из массива или введенная дата начала. Таким же образом нам нужно определить, какую конечную дату учитывать.
  • Наконец, поскольку мы получили даты начала и окончания для рассмотрения, мы можем просто вычислить разницу между двумя датами.

Ниже приведен код для того же.

У меня есть массив dateRanges, inputStartDate, inputEnddate и моя логика для вычисления дней между введенным диапазоном, как показано ниже:

 let dateRanges=[
{"startDate":"01/27","EndDate":"02/02"},
{"startDate":"02/03","EndDate":"02/09"},
{"startDate":"02/10","EndDate":"02/16"},
{"startDate":"02/17","EndDate":"02/23"}
]
let inputStartDate = "01/28"

let inputEndDate = "02/22"

dateRanges.forEach(eachDate => {
    var endDateToConsider = moment(eachDate.EndDate '/2019').isAfter(inputEndDate "/2019") ? inputEndDate: eachDate.EndDate;
    var startDateToConsider = moment(eachDate.startDate '/2019').isAfter(inputStartDate "/2019") ? eachDate.startDate : inputStartDate
    var daysDifference = moment(endDateToConsider '/2019').diff(moment(startDateToConsider '/2019'), 'days')   1
    console.log(daysDifference)

})