如何对数据按时间顺序排序,使当月当日条目排在最前
解决方案
核心思路
- 日期转换:把每个条目的
data(月日格式)和year拼接成完整日期字符串,转成Date对象,便于时间比较。 - 优先筛选:判断条目日期是否和当前系统日期同月同日(忽略年份),这类记录优先排在前面。
- 二级排序:对优先组和普通组,分别按时间从新到旧排序(需从旧到新的话,反转排序逻辑即可)。
代码实现
const dateList = [ { data:"Jan 12", year:2020 }, { data:"Jan 12", year:2021 }, { data:"Jan 5", year:2020 }, { data:"Oct 12", year:2021 }, { data:"Oct 12", year:2022 } ]; // 获取当前日期的月份和日期 const today = new Date(); const currentMonth = today.getMonth(); const currentDate = today.getDate(); // 排序逻辑 dateList.sort((a, b) => { // 转换为可比较的Date对象 const dateA = new Date(`${a.data}, ${a.year}`); const dateB = new Date(`${b.data}, ${b.year}`); // 判断是否匹配当月当日 const isAMatch = dateA.getMonth() === currentMonth && dateA.getDate() === currentDate; const isBMatch = dateB.getMonth() === currentMonth && dateB.getDate() === currentDate; // 匹配项优先排序 if (isAMatch && !isBMatch) return -1; if (!isAMatch && isBMatch) return 1; // 同组内按时间从新到旧排序(降序),需升序则改为 dateA - dateB return dateB - dateA; }); console.log(dateList);
结果示例
假设当前日期是10月12日,排序后结果为:
[ { data: "Oct 12", year: 2022 }, { data: "Oct 12", year: 2021 }, { data: "Jan 12", year: 2021 }, { data: "Jan 12", year: 2020 }, { data: "Jan 5", year: 2020 } ]
如果当前日期是1月12日,则两条Jan 12的记录会排在最前面,再按年份降序排列,剩余条目按时间降序排序。
灵活调整
- 若要按时间从旧到新排序,将同组内的排序逻辑改为
return dateA - dateB即可。 - 若“当月当日”是指定固定日期而非系统当前日期,直接替换
currentMonth和currentDate为目标月份、日期即可(比如targetMonth = 0对应1月,targetDate = 12)。
内容的提问来源于stack exchange,提问作者Aditya Kumar
相关产品推荐
相关产品推荐

