2013-04-23 59 views
1

我有一個像我怎麼能找到,如果日期位於兩個日期

date['min'] = '2013-11-11' 
date['max'] = '2013-11-23' 

日之間是否有任何單行功能,如果日期位於此範圍內可返回true。

我的意思是,如果只提供date.min然後我需要檢查給定的日期是否比它更大,如果只提供最大值,那麼我需要檢查它是否小於該值。如果兩者都提供那麼它是否屬於他們之間的形式YYYY-MM-DD

+0

是否必須是單行? :) – Asterisk 2013-04-23 10:06:06

+0

好吧,它可以是兩行,但我不想如果其他多次 – user2294401 2013-04-23 10:06:52

回答

6

日期可以比按字母順序,以及:

'2013-11-11' < '2013-11-15' < '2013-11-23' 

date['min'] < your_date < date['max'] 

這不會正確地爲其他格式,如DD.MM.YYYYMM/DD/YYYY工作。在這種情況下,您必須解析字符串並將它們轉換爲datetime對象。

如果不知道最小/最大變量是否存在,你可以這樣做:

date.get('min', '0000-00-00') < your_date < date.get('max', '9999-99-99') 

和任何你喜歡替換默認文本值。

+0

如果我沒有兩個值怎麼辦?我的意思是我不想使用,如果其他人。有沒有什麼捷徑。我的所有日​​期都只有yyyy-mm-dd格式 – user2294401 2013-04-23 09:59:40

+0

@ user2294401 - 好的,請參閱我的更新答案,即使最小/最大或其中任何一個都不存在,它也能正常工作。 – eumiro 2013-04-23 10:07:21

2

我認爲簡單的比較適用於此。

>>> from datetime import timedelta, date 
>>> min_date = date.today() 
>>> max_date = date.today() + timedelta(days=7) 
>>> d1 = date.today() + timedelta(days=1) 
>>> d2 = date.today() + timedelta(days=10) 
>>> min_date < d1 < max_date 
True 
>>> min_date < d2 < max_date 
False 

以下是更新版本:

def is_in_range(d, min=date.min, max=date.max): 
    if max: 
     return min < d < max 
    return min < d 


print is_in_range(d1, min_date, max_date) 
print is_in_range(d2, min_date, max_date) 
print is_in_range(d1, min_date) 
print is_in_range(d2, min_date) 

True 
False 
True 
True 
+0

即使max_date爲空,我也希望系統返回true – user2294401 2013-04-23 10:04:43

1

如果處理日期的對象:

from datetime import date 
in_range = (first_date or date.min) < my_date < (second_date or date.max) 
+0

如果我的second_date小於my_date,它將如何工作。它不會迴歸真實 – user2294401 2013-04-23 10:20:02