如何比较日期接近度、按与当前日期的远近排序对象数组
日期范围判断与数组排序实现
核心需求说明
你需要实现两个能力:
- 判断两个日期间隔是否在指定的天数范围内
- 对包含日期字段的对象数组按「与当前日期的接近程度」排序,越接近当前日期的元素排在越靠前的位置
实现代码
// 当前日期,示例固定为2021/08/18,实际使用直接替换为new Date()即可 const currentDate = new Date('2021/08/18'); let listOfObjects = [ { "user": "John", "date": "2021-08-20" }, { "user": "Bob", "date": "2021-08-17" }, { "user": "Joe", "date": "2021-08-09" } ]; // 固定常量:1天对应的毫秒数,用于时间差转换 const ONE_DAY_MS = 24 * 60 * 60 * 1000; // 1. 数组排序实现:按与当前日期的差值绝对值从小到大排序 listOfObjects.sort((a, b) => { const aDateDiff = Math.abs(new Date(a.date) - currentDate); const bDateDiff = Math.abs(new Date(b.date) - currentDate); return aDateDiff - bDateDiff; }); // 2. 两个日期范围判断方法 // 参数说明:date1、date2为待判断的两个日期(支持字符串/Date对象),maxDayDiff为指定的最大间隔天数 function checkDateInterval(date1, date2, maxDayDiff) { const dayDiff = Math.abs(new Date(date1) - new Date(date2)) / ONE_DAY_MS; return dayDiff <= maxDayDiff; } // 输出验证排序结果 console.log(listOfObjects);
结果说明
运行上述代码后输出的数组和你给出的预期结果完全一致:
[ { "user": "Bob", "date": "2021-08-17" }, { "user": "John", "date": "2021-08-20" }, { "user": "Joe", "date": "2021-08-09" } ]
如果需要调整排序规则,比如优先展示未来日期再展示历史日期,只需要修改sort方法内的判断逻辑即可。
日期判断方法调用示例:判断2021-08-17和2021-08-18是否在3天间隔内,调用checkDateInterval('2021-08-17', '2021-08-18', 3)即可得到返回值true。
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

