#python #datetime #verification
#python #дата-время #проверка
Вопрос:
В моем сценарии присоединения вам должно быть 13 лет, чтобы присоединиться. Проблема в том, что когда я проверяю его на определенные даты, это работает, только если я делаю это месяц назад.
cur_time = datetime.datetime.utcnow() - datetime.timedelta(days=4848.12)
time_13 = str(cur_time.strftime("%Y-%m-%d"))
bmonth = self.get_argument('bmonth', '')
bday = self.get_argument('bday', '')
byear = self.get_argument('byear', '')
birthday = byear '-' bmonth '-' bday
if time_13 <= birthday:
c_age = True
else:
c_age = ''
if c_age:
response = tornado.escape.json_encode({"error":"true","msg":"You must be 13 years of age or older to join uSocial'N"})
Комментарии:
1. Приведите несколько примеров «определенных дат».
2. Также 13 лет в днях — это 4748 дней, а не 4848.
3. Ну, я сравниваю это с датой 13-летней давности по сравнению с тем днем, который сейчас. Если я введу сегодняшнюю дату 13-летней давности, появится значение false, но если я вернусь к 31 октября 13 лет назад, это сработает.
Ответ №1:
Лучше сравнивать даты и диапазоны дат, а не строки.
Предполагая, что вы получаете строки для частей дня рождения:
bmonth = self.get_argument('bmonth', '')
bday = self.get_argument('bday', '')
byear = self.get_argument('byear', '')
bd = datetime.datetime(int(byear), int(bmonth), int(bday))
min_age = datetime.timedelta(weeks = 52*13)
if datetime.datetime.now() - bd < min_age:
response = tornado.escape.json_encode({"error":"true", "msg":
"You must be 13 years of age or older to join uSocial'N"})
Комментарии:
1. Это приводит к тому же результату.
2. Хорошо, итак, я получил это, выполнив
bd = datetime.datetime(int(byear), int(bmonth), int(bday)) min_age = datetime.timedelta(days=4748.12) if datetime.datetime.now() - bd <= min_age:
3. Поздравляю @egor83. Я переключаюсь с php на python для синхронизации с бэкэндом, что очень помогло с этим.