2013-07-24 133 views
2

我需要实施使用工作日的条件中断。我有一个DateField的课程,如果该日期未来少于5个工作日,则会发生一些操作(动作a),否则会发生b。我如何确定两个对象之间的工作天数?Django的营业日

显然我需要计算从今天开始的5个工作日。在未来5天内使用简单的时间三角洲将很容易,但考虑到工作日,它变得更加复杂。我认为我现在可以放心地忽略假期(这不是最好的例子,但我认为我可以在周一至周五的营业日期间完成)。任何人都可以给我一些指导,以了解我可以做些什么:target = today + 5 business_days

感谢

+3

如果你不计算假期,而且你总是计算五个工作日,那么每次都不只是一个日历周? –

+1

哦,上帝......当然是... –

+0

@PeterDeGlopper - 只有在开始日期也是营业日 –

回答

3

这里有一个通用的解决方案,即使你的情况是令人尴尬的简单,P

from datetime import timedelta, date 

def add_business_days(from_date, number_of_days): 
    to_date = from_date 
    while number_of_days: 
     to_date += timedelta(1) 
     if to_date.weekday() < 5: # i.e. is not saturday or sunday 
      number_of_days -= 1 
    return to_date 

以及检测结果。

>>> date.today() 
datetime.date(2013, 7, 25) 
>>> add_business_days(date.today(), 6) 
datetime.date(2013, 8, 2) 

如果您检查日期是否属于if语句中的假期,则为奖励标记。

+0

谢谢!我会接受这个答案,但我会说这是很简单的,甚至不保证一个。我觉得自己没有提出这个想法令人难以置信的愚蠢。 –

+0

“只有开始日期也是营业日”“在这种情况下,我几乎可以保证它会。”你能保证吗?如果没有,最终可能会最终使用此代码。 – Thomas