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

跨月周拆分需求:将跨月周日起始周拆分为当月与下月子区间

拆分跨月周日起始周的日期区间

原始输入数据

01-05-2022 to 07-05-2022
08-05-2022 to 14-05-2022
15-05-2022 to 21-05-2022
22-05-2022 to 28-05-2022
29-05-2022 to 04-06-2022
and so on....

期望输出数据

01-05-2022 to 07-05-2022
08-05-2022 to 14-05-2022
15-05-2022 to 21-05-2022
22-05-2022 to 28-05-2022
29-05-2022 to 31-05-2022
01-06-2022 to 04-06-2022
05-06-2022 to 11-06-2022 
and so on....

核心处理规则

  • 周的起始日为周日
  • 非跨月的周区间直接保留原格式
  • 跨月的周区间拆分为两段:
    1. 周起始日至当月最后一天
    2. 下月第一天至原周结束日
  • 拆分完成后,后续周区间按周日起始的规则正常生成

通用处理逻辑(伪代码)

遍历每个输入的日期区间 [start_date, end_date]:
    若 start_date 与 end_date 同属一个月份:
        将该区间直接加入结果列表
    否则:
        获取 start_date 所在月份的最后一天 last_day
        生成第一段区间: start_date → last_day
        生成第二段区间: 下月1号 → end_date
        将两段区间依次加入结果列表
    若为拆分后的后续周,按周日起始规则生成标准周区间并加入结果

Python 实现示例

借助datetime和calendar模块可快速实现该逻辑:

from datetime import datetime, timedelta
from calendar import monthrange

def split_cross_month_weeks(input_ranges):
    result = []
    date_format = "%d-%m-%Y"
    
    for line in input_ranges:
        line = line.strip()
        if line == "and so on....":
            result.append(line)
            continue
        start_str, end_str = line.split(" to ")
        start_date = datetime.strptime(start_str, date_format)
        end_date = datetime.strptime(end_str, date_format)
        
        # 判断是否跨月
        if start_date.month == end_date.month:
            result.append(line)
        else:
            # 生成当月内的区间段
            last_day_num = monthrange(start_date.year, start_date.month)[1]
            last_day_date = datetime(start_date.year, start_date.month, last_day_num)
            result.append(f"{start_date.strftime(date_format)} to {last_day_date.strftime(date_format)}")
            
            # 生成下月的区间段
            next_month_first = datetime(start_date.year, start_date.month + 1, 1)
            result.append(f"{next_month_first.strftime(date_format)} to {end_date.strftime(date_format)}")
            
            # 生成下一个完整周的区间(示例)
            # 计算下周日的日期:weekday()返回0=周一,6=周日,所以用6 - weekday()补天数
            next_week_start = next_month_first + timedelta(days=(6 - next_month_first.weekday()))
            next_week_end = next_week_start + timedelta(days=6)
            result.append(f"{next_week_start.strftime(date_format)} to {next_week_end.strftime(date_format)}")
    
    return "\n".join(result)

# 测试输入
input_data = [
    "01-05-2022 to 07-05-2022",
    "08-05-2022 to 14-05-2022",
    "15-05-2022 to 21-05-2022",
    "22-05-2022 to 28-05-2022",
    "29-05-2022 to 04-06-2022",
    "and so on...."
]

print(split_cross_month_weeks(input_data))

运行代码后输出将与期望格式完全匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 20:15:30