Использовать datetime.date.weekday()
, что:
Возвращает день недели в виде целого числа, где понедельник равен 0, а воскресенье - 6.
from datetime import date
from datetime import timedelta
today = date.today()
for i in range(7):
d = today - timedelta(days=i)
if d.weekday() < 5: # Here
print(d)
Производит:
2018-10-31
2018-10-30
2018-10-29
2018-10-26
2018-10-25
Это дает вам дни недели, которые выпадают за последние 7 дней. Или, если вы хотите предыдущие 7 рабочих дней, подумайте:
from datetime import date
from datetime import timedelta
today = date.today()
num_weekdays = 0
for i in range(10):
d = today - timedelta(days=i)
if d.weekday() < 5:
print(d)
num_weekdays += 1
if num_weekdays >= 7:
break
Эта версия в основном такая же, с ограничением диапазона, измененным с 7 на 10, и добавленным счетчиком num_weekdays
. Мы увеличиваем счетчик, когда печатаем дату, и как только мы нажимаем 7, мы разрываем цикл (в противном случае мы можем вывести 8 дат, в зависимости от дня недели today
).
Или другим способом:
from datetime import date
from datetime import timedelta
today = date.today()
prev_days = [today - timedelta(days=i) for i in range(10)] # Get 10 previous days
prev_days = [d for d in prev_days if d.weekday() < 5] # Filter out the weekends
for d in prev_days[:7]: # Select the first 7
print(d)
Похожая идея, мы создаем список из 10 предыдущих дат под названием prev_days
. Затем мы фильтруем этот список, отфильтровывая даты выходных. Затем в цикле for мы зацикливаемся только на первых 7 элементах отфильтрованного списка, поэтому мы печатаем не более 7 дат.