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

Python实现两日期间按月递增+同月逐日递增的日期生成

生成指定日期序列的解决方案

需求说明

给定起始日期 startdate = '2022-1-1'、结束日期 enddate = '2022-9-15',需要生成如下日期序列:

2022-2-1
2022-3-1
2022-4-1
2022-5-1
2022-6-1
2022-7-1
2022-8-1
2022-9-1
2022-9-2
...
2022-9-14

即先输出两日期之间每个月的1号,再在最后一个月内逐日输出到结束日期的前一天。

现有代码问题

当前代码仅能实现按月递增生成每月1号,但无法在同一循环中处理最后一个月的逐日递增,输出仅到2022-8-1:

from dateutil.relativedelta import relativedelta
from datetime import datetime
start_Date = datetime(2022, 1, 1)
endDate = datetime(2022, 9, 15)
tdelta = relativedelta(months=+1)

while start_Date <= endDate:
      print(start_Date)
      start_Date += tdelta

解决方案代码

通过在循环中判断当前日期的下一个月是否超出结束日期,切换递增方式(月度/逐日),实现需求:

from dateutil.relativedelta import relativedelta
from datetime import datetime, timedelta

start_Date = datetime(2022, 1, 1)
endDate = datetime(2022, 9, 15)
current_date = start_Date

while current_date < endDate:
    next_month_date = current_date + relativedelta(months=1)
    # 如果下一个月1号仍在结束日期范围内,继续按月生成
    if next_month_date <= endDate:
        print(next_month_date.strftime('%Y-%m-%d'))
        current_date = next_month_date
    else:
        # 进入最后一个月,逐日生成到结束日期前一天
        current_date += timedelta(days=1)
        if current_date < endDate:
            print(current_date.strftime('%Y-%m-%d'))

代码逻辑说明

  1. 初始化current_date为起始日期,循环条件设为current_date < endDate,避免包含结束日期本身。
  2. 计算当前日期的下一个月1号:next_month_date。
  3. 若next_month_date未超过结束日期,打印该日期并将current_date更新为next_month_date,继续月度递增。
  4. 当next_month_date超过结束日期时,切换为逐日递增:每次给current_date加1天,打印日期直到current_date达到结束日期前一天。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 11:15:28