Проверка возраста Python

#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 для синхронизации с бэкэндом, что очень помогло с этим.