如何从预订列表中获取距离当前日期最近的未来日期
问题原因
- 现有排序逻辑为按预订开始时间正序排列,排序后数组的第一个元素是全量列表里最早的历史日期,不符合你要找未来最近日期的需求
- 缺少过滤步骤:没有先筛掉所有开始时间早于当前日期的历史预订,排序范围包含了无效的历史数据
修复后可运行代码
const bookingsList = [ { sitterName: 'John', start: '2021-12-09', end: '2021-12-09', status: 'accepted', }, { sitterName: 'John', start: '2021-12-06', end: '2021-12-06', status: 'accepted', }, { sitterName: 'John', start: '2021-12-08', end: '2021-12-08', status: 'accepted', }, { sitterName: 'Guru', start: '2021-11-30', end: '2021-11-30', status: 'accepted', }, ]; // 先获取今日0点的时间戳,避免当天的预订因为时间部分被误过滤 const todayTimestamp = new Date(new Date().toLocaleDateString()).getTime() // 第一步:过滤出所有开始日期晚于等于今日的预订 const futureBookings = bookingsList.filter(item => { const startTimestamp = new Date(item.start).getTime() return startTimestamp >= todayTimestamp }) // 第二步:对未来预订按开始时间正序排序 const sortedBookings = futureBookings.sort((a, b) => { const dateA = new Date(a.start).getTime(); const dateB = new Date(b.start).getTime(); return dateA - dateB; }) // 取第一个就是晚于当前日期最近的预订,增加空判断避免无未来预订时报错 if (sortedBookings.length) { console.log(sortedBookings[0].start); } else { console.log('暂无未来预订') }
改动说明
- 新增过滤逻辑,只保留开始时间晚于等于今日的预订记录,排除无效历史数据
- 排序返回值直接用时间戳相减,比三元判断更严谨,不会出现日期相等时排序异常的问题
- 增加空数组判断,避免没有未来预订时代码运行报错
内容的提问来源于stack exchange,提问作者Gagandeep
相关产品推荐
相关产品推荐

