#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)
})