首页 > 解决方案 > 如何计算两个日期之间的差异,动态拆分它们?Python

问题描述

我必须编写一个函数来计算两个日期之间的天数差异。如果天数超过 30,则将其拆分为 n 个日期范围并保存在列表或字典中。我已经开始使用该功能但无法完成它。该函数必须计算动态值。

例如

start_date = '2020-07-01'
end_date = '2020-09-15'


difference = (end_date - start_date).days


dateranges = []
dateranges.append(start_date)


if difference > 30:
    end_date = start_date + dt.timedelta(days=30)
    dateranges.append(end_date)

但是我不知道如何让它循环,当它每次都需要一个新的 start_date 和 end_date 并计算它们之间的差异时。例如,我总是在这里添加 30 天,但可能需要添加的天数更少。

标签: pythonlistdatetimeif-statementwhile-loop

解决方案


例如,我总是在这里添加 30 天,但可能需要添加的天数更少。

datetime库和timedelta函数会处理它并在需要时增加月份。

from datetime import datetime
from datetime import timedelta

start_date = '2020-07-01'
end_date = '2020-09-15'

def date_difference(d1, d2):
    d1 = datetime.strptime(d1, "%Y-%m-%d")
    d2 = datetime.strptime(d2, "%Y-%m-%d")
    
    if abs((d2 - d1).days) > 30:
        dates = []
        # if you don't want to include start_date, use range(1, 30) instead.
        for i in range(0, 30):
            dates.append(d1 + timedelta(days=i))
        return dates
    return []
    
print(date_difference(start_date, end_date))

输出:

[datetime.datetime(2020, 7, 1, 0, 0), datetime.datetime(2020, 7, 2, 0, 0),
datetime.datetime(2020, 7, 3, 0, 0), datetime.datetime(2020, 7, 4, 0, 0),
datetime.datetime(2020, 7, 5, 0, 0), datetime.datetime(2020, 7, 6, 0, 0),
datetime.datetime(2020, 7, 7, 0, 0), datetime.datetime(2020, 7, 8, 0, 0),
datetime.datetime(2020, 7, 9, 0, 0), datetime.datetime(2020, 7, 10, 0, 0),
...
datetime.datetime(2020, 7, 30, 0, 0)]

推荐阅读