Я хочу сравнить две даты в django views py
Я хочу сравнить две даты, чтобы вернуть что-то. Я пытаюсь сделать это уже долгое время. Итак, что я хочу:
У меня есть переменная current_date = date.today, теперь я хочу сравнить current_date с другой переменной поля даты. Я попробовал этот код :
current_date = date.today()
# I am getting this another date from a html input type date
another_date = request.POST.get("date")
if current_date > another_date:
return True
else:
return False
Но я получаю ошибку
'<' not supported between instances of 'datetime.date' and 'str'
Как можно решить эту проблему?
Потому что вы сравниваете строку с объектом datetime.date. Например, сравнивая
23 > "hello world"
Попробуйте преобразовать строку, полученную из предыдущего метода. Следуйте за другим обсуждением
Это:
another_date = request.POST.get("date")
дает вам дату в строковом формате, например, "2022-06-16", а datetime.date
дает datetime.date(2022, 06, 16)
. Так сравнивать нельзя, нужно преобразовать один тип в тип другого (или наоборот).
Я предлагаю:
current_date = date.today().strftime("%Y-%m-%d")
another_date = request.POST.get("date")
Я предполагаю, что 'date'
выглядит как year-month-day
.
Поля даты из формы дают строковое значение, которое форматируется в YY-MM-DD
. Этот формат, который является строкой str
, не может быть сопоставлен с объектом datetime
. Следовательно, причина получения ошибки, которую вы получили:
'<' не поддерживается между экземплярами 'datetime.date' и 'str'
Вы можете создать многократно используемую функцию для сравнения дат, например:
def dates_equal(d1, d2):
if d1 == d2:
return True
else:
return False
Затем где-то в вашем коде вы можете вызвать его как...
current_date = date.today()
# Getting the string version of the date object
current_date = current_date.strftime("%Y-%m-%d")
# I am getting this another date from a html input type date
another_date = request.POST.get("date")
# Calling the date comparing method here...
if dates_equal(current_date, another_date):
# do something here...
else:
# do something else...