我有一系列日期。
['2023-06-02T00:00:00.000+03:00','2023-06-02T00:00:00.000+03:00','2023-12-04T00:00:00.000+03:00']
我需要在切换日期组件时,将所选日期与给定数组进行比较,并在切换到右侧或左侧时给出最近的日期 我开始制定一个方法。但我不明白如何在一个循环中比较这个
向左 - 日期较少,向右 - 日期较多
const dateSwitch = (prev: boolean) => {
let newDate: string = DateTime.fromJSDate(new Date()).startOf("day")
if (enabledDates.value.length) {
if (prev) enabledDates.value.forEach((enableDateFromArr,idx) => {
const enableDate = DateTime.fromISO(enableDateFromArr).startOf("day").toISO()
const compare = enableDate >= date.value
})
}
}
}
使用
DateTime.fromISO()
转换所选日期和数组中的日期。然后,迭代日期数组并计算每个日期与所选日期之间的差异。使用 reduce()
,找到差异最小的日期的索引,并返回差异最小的索引处的日期。
const dateSwitch = (prev: boolean) => {
let newDate: string = DateTime.fromJSDate(new Date()).startOf("day").toISO();
if (enabledDates.value.length) {
let selectedDate = DateTime.fromISO(newDate);
let dates = enabledDates.value.map(date => DateTime.fromISO(date));
let differences = dates.map(date => selectedDate.diff(date, 'days').days);
let minIndex = differences.reduce((minIndex, diff, index) => diff < differences[minIndex] ? index : minIndex, 0);
return dates[minIndex].toISO();
}
}