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

如何在JavaScript中从日期数组生成日期区间数组?

将日期数组转换为连续时间区间数组的JavaScript方案

需求说明

需要把按顺序排列的日期数组(格式为dd/MM/yyyy),合并成由连续日期区间对象组成的数组,每个对象包含start_date和end_date,非连续的日期则拆分为独立区间。

可用JavaScript库推荐

你可以借助成熟的日期处理库简化逻辑:

  • date-fns:轻量模块化的日期工具库,可通过parse解析日期,再用addDays和isEqual判断日期是否连续。
  • moment.js:老牌日期库(虽进入维护状态但仍可使用),通过moment(date, 'DD/MM/YYYY')解析日期,再用add(1, 'day')对比下一个日期是否连续。

这些库能帮你快速处理日期解析、增减和相等判断,避免手动处理格式转换的坑。

手动实现方案(无需额外库)

如果不想引入第三方库,可自行实现逻辑,核心步骤为:解析日期为可比较的时间戳、遍历分组连续日期、生成区间数组。

示例代码:

function convertDatesToIntervals(dateArray) {
  if (!dateArray.length) return [];

  // 解析dd/MM/yyyy格式日期为时间戳
  const parseDate = (dateStr) => {
    const [day, month, year] = dateStr.split('/').map(Number);
    return new Date(year, month - 1, day).getTime();
  };

  const intervals = [];
  let currentStart = dateArray[0];
  let currentEnd = dateArray[0];
  let prevTimestamp = parseDate(currentStart);

  for (let i = 1; i < dateArray.length; i++) {
    const currentDate = dateArray[i];
    const currentTimestamp = parseDate(currentDate);
    // 判断当前日期是否为前一天的次日(86400000为一天的毫秒数)
    if (currentTimestamp === prevTimestamp + 86400000) {
      currentEnd = currentDate;
    } else {
      // 非连续则保存当前区间,开启新区间
      intervals.push({ start_date: currentStart, end_date: currentEnd });
      currentStart = currentDate;
      currentEnd = currentDate;
    }
    prevTimestamp = currentTimestamp;
  }

  // 保存最后一个区间
  intervals.push({ start_date: currentStart, end_date: currentEnd });
  return intervals;
}

// 测试示例
const inputDates = ["01/01/2015", "02/01/2015", "03/01/2015", "05/01/2015", "06/01/2015"];
console.log(convertDatesToIntervals(inputDates));
// 输出:[{start_date: "01/01/2015", end_date: "03/01/2015"}, {start_date: "05/01/2015", end_date: "06/01/2015"}]

注意事项

  • 确保输入日期数组按时间顺序排列,否则需先执行排序处理
  • 若实际日期格式为dd-MM-yyyy,只需将代码中的split('/')改为split('-')即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 22:21:37