Ответ 1
В 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
У меня есть переменная date: 2011-01-15
, и я бы хотел получить логическое значение, если указанная дата находится в пределах 3 дней с СЕГОДНЯ. Я не совсем уверен, как это сделать в Python. Im касается только даты, а не даты и времени.
Мой рабочий пример - "льготный период". Пользователь регистрируется на моем сайте, и если льготный период находится в пределах 3 дней с сегодняшнего дня, для этого пользователя опущены дополнительные скрипты и т.д.
Я знаю, что вы можете сделать некоторые причудливые/сложные вещи в модуле даты Python, но я не уверен, где искать.
В 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
Вычитание двух объектов 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
Что касается "где посмотреть": официальная документация превосходна.
Другие уже более чем адекватно ответили, поэтому не нужно голосовать за этот ответ.
(Использует технику, показанную в ответе Марка Байерса , +1 к нему).
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()
Объектно-ориентированное решение
import datetime
class DatetimeRange:
def __init__(self, dt1, dt2):
self._dt1 = dt1
self._dt2 = dt2
def __contains__(self, dt):
return self._dt1 < dt < self._dt2
dt1 = datetime.datetime.now()
dt2 = dt1 + datetime.timedelta(days = 2)
test_true = dt1 + datetime.timedelta(days = 1)
test_false = dt1 + datetime.timedelta(days = 5)
test_true in DatetimeRange(dt1, dt2) #Returns True
test_false in DatetimeRange(dt1, dt2) #Returns False