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

如何实现从当前日期开始的未来日期由远及近排序并过滤过往日期

解决方案

要实现保留当前日期及之后的条目,并按需求排序,需要分两步处理:先过滤掉已过去的日期,再修正排序逻辑(原函数直接比较日期字符串存在格式解析风险)。

1. 处理日期格式兼容问题

如果你的日期字符串是DD/MM/YYYY格式,直接用new Date()解析可能出错(JS默认优先识别MM/DD/YYYY),所以需要先转换成标准的YYYY-MM-DD格式来确保解析正确:

const parseDate = (dateStr) => {
  const [day, month, year] = dateStr.split('/');
  // 返回对应日期的时间戳(当天0点整)
  return new Date(`${year}-${month}-${day}`).getTime();
};

2. 过滤过往日期

先获取当前日期的起始时间(当天00:00:00),避免因当前时间(比如下午)误过滤掉当天的条目,然后筛选出日期大于等于该时间的条目:

const filterFutureDates = (items) => {
  const todayStart = new Date();
  todayStart.setHours(0, 0, 0, 0);
  const todayTimestamp = todayStart.getTime();
  
  return items.filter(item => {
    const itemTimestamp = parseDate(item.date);
    return itemTimestamp >= todayTimestamp;
  });
};

3. 修正排序函数

原函数直接比较字符串日期存在格式错误,改用时间戳比较,实现两种排序需求:

  • 由近及远排序(最近的未来日期在前,即你示例中的顺序):
const sortBySoonestDate = (a, b) => {
  const timestampA = parseDate(a.date);
  const timestampB = parseDate(b.date);
  return timestampA - timestampB;
};
  • 由远及近排序(最远的未来日期在前):
const sortByFurthestDate = (a, b) => {
  const timestampA = parseDate(a.date);
  const timestampB = parseDate(b.date);
  return timestampB - timestampA;
};

4. 组合使用

把过滤和排序逻辑结合,直接处理原始数据:

const processDates = (items) => {
  const futureItems = filterFutureDates(items);
  // 按需选择排序函数:sortBySoonestDate 或 sortByFurthestDate
  return futureItems.sort(sortBySoonestDate);
};

示例验证

假设输入数据:

const items = [
  { date: "11/09/2023" },
  { date: "14/09/2023" },
  { date: "12/09/2023" },
  { date: "15/09/2023" }
];

// 当前日期为2023年9月13日时,执行后得到:
// [{ date: "14/09/2023" }, { date: "15/09/2023" }]
console.log(processDates(items));

内容的提问来源于stack exchange,提问作者Zerkley

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 21:29:54