添加日期并在日期上循环数周

时间:2018-07-19 10:48:42

标签: python

我做到了

>>> d1 = datetime.date(2018, 7, 26)
>>> d2 = datetime.date(2018, 10, 14)
>>> dif = d2 - d1
>>> start_mon =(d1 - datetime.timedelta(days=d1.weekday()))
>>> num_of_weeks = math.ceil((d2 - start_mon).days / 7.0)
>>> num_of_weeks
12
>>>xp = [d1 + datetime.timedelta(i) for i in range( math.ceil((D2 - start_mon).days / 7.0))]
>>> [datetime.date(2018, 7, 26), datetime.date(2018, 7, 27), datetime.date(2018, 7, 28), datetime.date(2018, 7, 29), datetime.date(2018, 7, 30), datetime.date(2018, 7, 31), datetime.date(2018, 8, 1), datetime.date(2018, 8, 2), datetime.date(2018, 8, 3), datetime.date(2018, 8, 4), datetime.date(2018, 8, 5), datetime.date(2018, 8, 6)]

我希望python给我12周之间的工作日。因此,由于开始日期是2018-07-26,所以下一个日期应该是2018-08-02,下一个日期也应该是2018-07-09,直到它在2018-10-11结束。如果算完之后是12周。

例如

2018-07-26
2018-08-02
2018-08-09
2018-08-16
2018-08-23 
2018-08-30 
2018-09-06 
2018-09-13 
2018-09-20 
2018-09-27 
2018-10-04 
2018-10-11

我想念什么?

3 个答案:

答案 0 :(得分:0)

您可以使用while循环,每次通过增加7天。

xp = [d1]
while (d2 - d1).days > 7:
    d1 += datetime.timedelta(7)
    xp.append(d1)

在这种情况下,就地添加是有效的,因为datetime对象是不可变的。

答案 1 :(得分:0)

这是另一种尝试:

import datetime

d1 = datetime.date(2018, 7, 26)
d2 = datetime.date(2018, 10, 14)

days = d1
while days < d2:
    print(days)
    days += datetime.timedelta(7)

答案 2 :(得分:0)

我也使用了此功能。

>>> def next_days(st_date, end_date):
    if st_date <= end_date:
        print (st_date.strftime("%Y-%m-%d"))
        next_date = st_date + timedelta(days=7)
        next_days(next_date, end_date)


>>> st_date = datetime.date(2018, 7, 26)
>>> end_date = datetime.date(2018, 10, 14)
>>> next_days(st_date, end_date)