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

Python如何按指定天数间隔在起止日期之间正确循环遍历

问题根因

你当前代码按1天递增的核心原因是range函数默认步长为1,变量x每次只加1,最终生成的相邻日期间隔自然为1天,不符合你指定固定间隔的需求。

解决方案

方案1:while循环实现(逻辑更直观,适配边界场景)

推荐优先用这种写法,可读性和容错性更高:

from datetime import datetime, timedelta

# 提前解析好起始日期,避免重复计算
start_date = datetime.strptime("2021-07-31 07:30:00", "%Y-%m-%d %H:%M:%S")
# 你的结束日期转换逻辑保持不变
_endDate = datetime.strptime(_ruccerenceList[0], "%Y-%m-%d")
# 取间隔天数
step_days = int(_ruccerenceList[2])

current_date = start_date
while current_date <= _endDate:
    # 此处写你自己的业务逻辑,比如格式化输出日期
    print(current_date.strftime("%Y-%m-%d"))
    # 按固定步长累加日期
    current_date += timedelta(days=step_days)

方案2:修正range生成器写法

如果要保持生成器的写法,需要给range指定第三个步长参数,同时调整区间边界适配左闭右开的特性:

start_date = datetime.strptime(date, "%Y-%m-%d %H:%M:%S")
step_days = int(_ruccerenceList[2])
# 计算起始到结束的总间隔天数
total_days = (_endDate - start_date).days
# range参数:起始偏移量、最大偏移量、步进值
date_array = (start_date + timedelta(days=x) for x in range(0, total_days + 1, step_days))

for date_object in date_array:
    print(date_object.strftime("%Y-%m-%d"))
注意事项

由于你转换后的_endDate时分秒默认为00:00:00,如果起始日期带的时分秒大于0,刚好落在结束日期当天的时间会被判为大于_endDate被排除。如果需要不管时分秒都包含结束日期当天,可以将判断条件改为只比对日期部分:

while current_date.date() <= _endDate.date():

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 04:09:03