Vant Calendar: Как на функцию onConfirm форматировать данные?
Столкнулась со странной проблемой при срабатывании onConfirm. В календаре vant при изменении отмеченных дней в календаре неверно срабатывает функция.
onConfirm(dates) {
(collapseRange(getPrevDates(dates)));
}
Следующая функция получает массив и относительно currentDate отрезает массив (оставляет те, что были раньше даты)
function getPrevDates(arr) {
let newArr = arr.sort((a, b) => a - b);
let result = [];
for (let i = 0; i < newArr.length; i++) {
if (newArr[i] <= currentDate) {
result.push(newArr[i]);
}
}
return result;
}
Следующая функция должна упорядоченный массив разделить на подмассивы, в которых даты идут по порядку разницей в один день
function collapseRange(arr) {
let res = [];
let elem = [];
for (let i = 1; i < arr.length; i++) {
let date1 = new Date(arr[i].getTime());
let date2 = new Date(arr[i - 1].getTime());
if (date1.setDate(date1.getDate() - 1) == date2.setDate(date2.getDate())) {
if (i == arr.length - 1) {
elem.push(arr[i - 1]);
elem.push(arr[i]);
res.push(elem);
elem = [];
}
elem.push(arr[i - 1]);
} else {
elem.push(arr[i - 1]);
res.push(elem);
elem = [];
}
}
return res;
}
Крайняя формула вроде работает, так как если входные данные не менять и просто вызывать при нажатии onConfirm, то выводится именно то, что отмечено и в том же порядке. Но, если добавить даты или убрать отмеченные - почему-то разбивается на неправильные подмассивы. Даты остаются все равно в правильном порядке. Например:
(3) [Array(3), Array(2), Array(5)]
0:
(3) [Mon Apr 24 2023 03:00:00 GMT+0300 (Москва, стандартное время),
Tue Apr 25 2023 03:00:00 GMT+0300 (Москва, стандартное время),
Wed Apr 26 2023 03:00:00 GMT+0300 (Москва, стандартное время)]
1:
(2) [Thu May 18 2023 00:00:00 GMT+0300 (Москва, стандартное время),
Fri May 19 2023 00:00:00 GMT+0300 (Москва, стандартное время)]
2:
(5) [Sat May 20 2023 03:00:00 GMT+0300 (Москва, стандартное время),
Sun May 21 2023 03:00:00 GMT+0300 (Москва, стандартное время),
Mon May 22 2023 03:00:00 GMT+0300 (Москва, стандартное время),
Tue May 23 2023 03:00:00 GMT+0300 (Москва, стандартное время),
Wed May 24 2023 03:00:00 GMT+0300 (Москва, стандартное время)]
Хотя исходя из этих данных должны быть всего два подмассива: с 24 по 26 и с 18 до 24.