在Python中检查日期范围内的日期

64 投票
5 回答
85860 浏览
提问于 2025-04-16 09:59

我有一个日期变量:2011-01-15,我想知道这个日期距离今天是否在3天之内,返回一个布尔值(真或假)。我不太确定在Python中该怎么写。这里我只处理日期,不涉及具体的时间。

我的例子是一个“宽限期”。当用户登录我的网站时,如果这个宽限期距离今天在3天之内,就会省略一些额外的脚本等内容。

我知道在Python的日期模块中可以做一些很复杂的操作,但我不太清楚该从哪里入手。

5 个回答

9

其他人已经很好地回答了这个问题,所以不需要对这个回答投票。
(使用了Mark Byers在回答中展示的技巧;给他加个赞)。

import datetime as dt

def within_days_from_today(the_date, num_days=7):
    '''
        return True if date between today and `num_days` from today
        return False otherwise

        >>> today = dt.date.today()
        >>> within_days_from_today(today - dt.timedelta(days=1), num_days=3)
        False
        >>> within_days_from_today(dt.date.today(), num_days=3)
        True
        >>> within_days_from_today(today + dt.timedelta(days=1), num_days=3)
        True
        >>> within_days_from_today(today + dt.timedelta(days=2), num_days=3)
        True
        >>> within_days_from_today(today + dt.timedelta(days=3), num_days=3)
        True
        >>> within_days_from_today(today + dt.timedelta(days=4), num_days=3)
        False
    '''
    lower_limit = dt.date.today()
    upper_limit = lower_limit + dt.timedelta(days=num_days)
    if lower_limit <= the_date <= upper_limit:
        return True
    else:
        return False

if __name__ == "__main__":
    import doctest
    doctest.testmod()
12

把两个 date 对象相减,会得到一个 timedelta 对象,这个对象可以和其他的 timedelta 对象进行比较。

举个例子:

>>> from datetime import date, timedelta
>>> date(2011, 1, 15) - date.today()
datetime.timedelta(1)
>>> date(2011, 1, 15) - date.today() < timedelta(days = 3)
True
>>> date(2011, 1, 18) - date.today() < timedelta(days = 3)
False

至于“在哪里查找”:官方的 文档 非常好。

147

在Python中,要检查一个数是否在某个范围内,你可以用这种写法:a <= x <= b

>>> import datetime
>>> today = datetime.date.today()
>>> margin = datetime.timedelta(days = 3)

>>> today - margin <= datetime.date(2011, 1, 15) <= today + margin
True

撰写回答