You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何对数据按时间顺序排序,使当月当日条目排在最前

解决方案

核心思路

  1. 日期转换:把每个条目的data(月日格式)和year拼接成完整日期字符串,转成Date对象,便于时间比较。
  2. 优先筛选:判断条目日期是否和当前系统日期同月同日(忽略年份),这类记录优先排在前面。
  3. 二级排序:对优先组和普通组,分别按时间从新到旧排序(需从旧到新的话,反转排序逻辑即可)。

代码实现

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 19:35:35