Вы не должны использовать встроенный анализатор для отметок времени, так как формат DD-MMM-YYYY не поддерживается ECMA-262.Кроме того, функция date-fns isAfter просто сообщает вам, находится ли первая дата после второй, но не сообщает вам, насколько.Более подходящей функцией была бы diffInDays .
date-fns не имеет своего собственного анализатора, он использует встроенный анализатор, поэтому я бы предложил использоватьдругая библиотека.Парсеры были рассмотрены много раз в других вопросах, но парсер для формата OP не сложен.
Так что просто начните с первой даты и остановитесь, когда вы либо доберетесь до конца массива, либо получитедата, которая более чем за один день до предыдущей даты, например
// Parser for format DD-MMM-YYYY
// Does not validate date
function parseDMY(s) {
let months = 'jan feb mar apr may jun jul aug sep oct nov dec'.split(' ');
let b = s.split('-');
return new Date(b[2], months.indexOf(b[1].toLowerCase().substr(0,3)), b[0]);
}
// Return true if d1 is the day before d0
// where d0, d1 are Dates
function isPreviousDay(d0, d1) {
// Copy dates and set to 00:00:00
let t0 = new Date(d0);
t0.setHours(0,0,0,0);
let t1 = new Date(d1);
t1.setHours(0,0,0,0);
// Set t0 to previous day
t0.setDate(t0.getDate() - 1);
// See if they now have the same time value
return t0.getTime() == t1.getTime();
}
function getContiguous(dates) {
// Get timestamps as array of Dates
let arr = dates.map(parseDMY);
// Result starts with first timestamp
let result = [dates[0]];
// Stop comparing at second last date
let len = dates.length - 2
let i = 0;
// While each date is the day before the current date,
// add its timestamp to the result array
while (i<len && isPreviousDay(arr[i], arr[i+1])) {
result.push(dates[i+1]);
i++;
}
return result;
}
let dates = ["19-June-2019", "18-June-2019", "17-June-2019", "16-June-2019", "14-June-2019"];
console.log(getContiguous(dates));
<script src="https://cdnjs.cloudflare.com/ajax/libs/date-fns/1.30.1/date_fns.min.js"></script>
Я подключил библиотеку date-fns, но она не загружалась правильно, поэтому я написал сделанную на заказ функцию isPreviousDay .