Как перейти на одну неделю (7 дней) в цикл for (datetime) - PullRequest
0 голосов
/ 28 сентября 2018

У меня есть цикл for следующим образом:

for mydate in daterange (startDate, endDate):

это увеличивается, хотя каждый день.Я хочу, чтобы этот шаг длился неделю.Взломать было бы пропустить 6 дней, но это ужасно.Как это сделать?

def daterange(start_date, end_date):
    for n in range(int ((end_date - start_date).days)):
        yield start_date + timedelta(n)

Ответы [ 2 ]

0 голосов
/ 28 сентября 2018

Просто добавьте размер шага в ваш цикл:

from datetime import timedelta, date

def daterange(start_date, end_date):
     for n in range(0, int((end_date - start_date).days) + 1, 7):
         yield start_date + timedelta(n)

start_dt = date(2018, 9, 1)
end_dt = date(2018, 10, 30)
for dt in daterange(start_dt, end_dt):
    print(dt.strftime("%Y-%m-%d"))

Вывод:

2018-09-01
2018-09-08
2018-09-15
2018-09-22
2018-09-29
2018-10-06
2018-10-13
2018-10-20
2018-10-27
0 голосов
/ 28 сентября 2018

Вы используете объект диапазона с шагом 7 и добавляете его к начальной дате:

import datetime

def daterange(startdate, enddate, steps=1): 
    """Yields dates in increments of steps days from startdate to enddate"""
    numdays = (enddate-startdate).days 
    for x in range (0, numdays, steps):
        yield startdate + datetime.timedelta(days = x)


today = datetime.datetime.today() 
end = today + datetime.timedelta(days=40)

print( list(daterange(today, end, 7)))

Вывод:

[datetime.datetime(2018, 9, 28, 19, 34, 26, 976681), 
 datetime.datetime(2018, 10, 5, 19, 34, 26, 976681), 
 datetime.datetime(2018, 10, 12, 19, 34, 26, 976681), 
 datetime.datetime(2018, 10, 19, 19, 34, 26, 976681), 
 datetime.datetime(2018, 10, 26, 19, 34, 26, 976681), 
 datetime.datetime(2018, 11, 2, 19, 34, 26, 976681)]
...