2013-07-24 84 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