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

数组中Date Range Comparison问题:多日期区间无重叠校验受阻

解决多日期范围重叠校验的问题

嘿,我来帮你搞定这个多日期范围重叠校验的难题!你已经拆分了起止日期这一步做的很对,接下来只需要调整一下比较逻辑,就能轻松处理任意数量的日期范围了。

核心思路

要检查多个日期范围是否重叠,最高效的方法是先排序再相邻比较:

  • 先把所有日期范围按「开始日期」升序排列
  • 排序后只需要检查每一组相邻的日期范围:如果前一个范围的结束日期 >= 后一个范围的开始日期,就说明存在重叠。(非相邻的范围不需要单独比较,因为排序后如果相邻的都不重叠,非相邻的肯定也不会重叠)

具体实现步骤(以JavaScript为例)

  1. 拆分并转换日期:把每个日期范围字符串拆成开始/结束日期,转换成Date对象方便比较
  2. 排序日期范围:按开始日期从小到大排序
  3. 相邻范围校验:遍历排序后的数组,逐个对比当前范围的结束日期和下一个范围的开始日期
function hasOverlappingDateRanges(dateRangeArray) {
  // 处理空数组或单个范围的情况,直接返回无重叠
  if (dateRangeArray.length <= 1) return false;

  // 1. 拆分日期字符串并转换为Date对象
  const parsedRanges = dateRangeArray.map(rangeStr => {
    const [startDateStr, endDateStr] = rangeStr.split('-');
    // 注意:如果你的日期格式不是YYYY-MM-DD,需要调整转换逻辑
    return {
      start: new Date(startDateStr),
      end: new Date(endDateStr)
    };
  });

  // 2. 按开始日期升序排序
  parsedRanges.sort((a, b) => a.start.getTime() - b.start.getTime());

  // 3. 检查相邻范围是否重叠
  for (let i = 0; i < parsedRanges.length - 1; i++) {
    const currentRangeEnd = parsedRanges[i].end;
    const nextRangeStart = parsedRanges[i + 1].start;

    // 这里的判断条件可以根据业务需求调整:
    // - 如果认为"2024-01-10"和"2024-01-10"算重叠,用 >=
    // - 如果不算,用 >
    if (currentRangeEnd >= nextRangeStart) {
      return true; // 发现重叠
    }
  }

  return false; // 无重叠
}

// 测试示例
const validRanges = ['2024-02-01-2024-02-07', '2024-02-08-2024-02-15', '2024-02-16-2024-02-22'];
console.log(hasOverlappingDateRanges(validRanges)); // false(无重叠)

const invalidRanges = ['2024-03-05-2024-03-12', '2024-03-10-2024-03-18', '2024-03-20-2024-03-25'];
console.log(hasOverlappingDateRanges(invalidRanges)); // true(前两个范围重叠)

注意事项

  • 日期格式一致性:确保所有日期字符串的格式统一(比如YYYY-MM-DD),如果是其他格式(如MM/DD/YYYY),需要先做格式转换再创建Date对象,避免转换错误。
  • 边界规则自定义:根据你的业务需求调整重叠的判断标准(比如是否包含首尾日期重叠的情况)。
  • 异常处理:如果需要处理无效的日期字符串(比如格式错误的输入),可以在转换Date对象时添加校验逻辑,比如检查start和end是否为有效日期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 04:06:20