2013-04-23 55 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