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

如何将逗号分隔的日期字符串合并为连续日期区间与单独日期列表

日期连续区间合并实现方案

完全可以通过拆分字符串、逐一遍历日期的方式实现需求,核心逻辑简单,不需要引入复杂依赖,具体实现步骤如下:

  • 第一步:字符串拆分预处理
    把输入的逗号分隔日期串按逗号切割,每个片段去除前后空格,过滤空内容后得到日期列表。为了兼容乱序输入的场景,可以把所有日期统一转成可计算日期间隔的格式(比如编程语言内置的日期时间对象)后按升序排序;如果能保证输入日期本身是按升序排列的,可以省略排序步骤。
  • 第二步:遍历分组连续日期
    初始化分组记录容器,先取第一个日期作为当前连续区间的起始、结束值。从第二个日期开始逐个遍历:
    • 计算当前日期和当前区间结束日期的间隔,如果间隔刚好为1天,说明日期连续,直接把当前区间的结束值更新为当前日期即可
    • 如果间隔大于1天,说明连续关系中断,先把当前记录的区间存入分组容器,再新建一个连续区间,起始、结束值都设为当前遍历到的日期
      所有日期遍历完成后,记得把最后一个未存入容器的当前区间追加进去。
  • 第三步:按要求格式化输出
    按下标从0开始遍历分组好的日期区间:如果区间的起始、结束日期是同一天,直接输出单日期格式;如果起止日期不同,就输出起始日期 - 结束日期的区间格式。

以Python实现为例,可直接运行的参考代码如下:

from datetime import datetime, timedelta

def merge_continuous_dates(raw_date_str):
    # 拆分字符串做预处理
    date_items = [item.strip() for item in raw_date_str.split(',') if item.strip()]
    # 转日期对象并排序,输入确定有序时可去掉sorted
    date_objs = sorted([datetime.strptime(item, '%Y-%m-%d') for item in date_items])
    if not date_objs:
        return ""

    # 遍历分组连续日期
    date_groups = []
    period_start = period_end = date_objs[0]
    for current_date in date_objs[1:]:
        if current_date - period_end == timedelta(days=1):
            period_end = current_date
        else:
            date_groups.append((period_start, period_end))
            period_start = period_end = current_date
    # 追加最后一个分组
    date_groups.append((period_start, period_end))

    # 格式化结果
    result_lines = []
    for index, (start, end) in enumerate(date_groups):
        start_fmt = start.strftime('%Y-%m-%d')
        end_fmt = end.strftime('%Y-%m-%d')
        if start == end:
            result_lines.append(f"{index} => {start_fmt}")
        else:
            result_lines.append(f"{index} => {start_fmt} - {end_fmt}")
    return "\n".join(result_lines)

# 测试示例输入
input_content = "2022-07-15, 2022-07-16, 2022-07-17, 2022-07-18, 2022-07-22, 2022-07-25, 2022-07-26, 2022-07-27, 2022-07-28"
print(merge_continuous_dates(input_content))

运行上述代码,输出结果和需求给出的期望结果完全一致:

0 => 2022-07-15 - 2022-07-18
1 => 2022-07-22
2 => 2022-07-25 - 2022-07-28

注意:不建议直接用字符串拼接数字的方式判断日期间隔,跨月、跨年场景下这种判断逻辑会出错,用语言内置的日期计算能力处理间隔判断最稳妥。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 03:54:20