如何确定日期是否在两个日期之间

时间:2013-04-23 09:53:58

标签: python django

我有

之类的日期
date['min'] = '2013-11-11'
date['max'] = '2013-11-23'

如果日期在该范围内,是否有任何单行函数可以返回true。

我的意思是如果只提供date.min那么我需要检查给定的日期是否比它更重要,如果只提供了max,那么我需要检查它是否小于那个。如果两者都提供,那么它是否介于它们之间

3 个答案:

答案 0 :(得分:6)

YYYY-MM-DD形式的日期也可以按字母顺序进行比较:

'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')

并用您喜欢的任何内容替换默认文本值。

答案 1 :(得分: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

答案 2 :(得分:1)

如果您处理日期对象:

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