2016-10-25 4 views
0

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

def calc_bus_day(start_day): 
    if start_day.isoweekday() in range(1, 5): 
     shift = 6 
     returnDate = start_day + datetime.timedelta(days=shift) 
     if returnDate.isoweekday() == 0: 
      return "{:%m-%d-Y}".format(returnDate + datetime.timedelta(days=1)) 
     elif returnDate.isoweekday() == 5: 
      return "{:%m-%d-%Y}".format(returnDate + datetime.timedelta(days=2)) 
     else: 
      return "{:%m-%d-%Y}".format(returnDate) 

ответ

1

В сдвигая на 6 дней всегда включает в себя переход через выходные, вы можете перейти в течение 8 дней (6 дней + суббота и воскресенье):

def calc_bus_day(start_day): 
    if start_day.isoweekday() in range(1, 5): 
     shift = 8 
     < your code > 
+0

Лол, почему я не думал об этом? – Pyth0nicPenguin

1

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

from datetime import datetime, timedelta, date  

def getNextBusinessDays(date, num): 
    for i in range(0, num): 
     date = getNextBusinessDay(date) 
    return date  

def getNextBusinessDay(fromDate): 
    nextBuinessDate = datetime.strptime(fromDate, "%Y-%m-%d") 
    nextBuinessDate = nextBuinessDate + timedelta(days=1) 
    if date.weekday(nextBuinessDate) not in range(0, 5): 
     nextBuinessDate = nextBuinessDate + timedelta(days=1) 
    if date.weekday(nextBuinessDate) not in range(0, 5): 
     nextBuinessDate = nextBuinessDate + timedelta(days=1) 
    return nextBuinessDate.strftime('%Y-%m-%d') 

Например getNextBusinessDays('2016-10-20', 6) будет производить "2016-10-28"