Правильно считать даты?

Ссылка скопирована
C# Qt
1 ответ

Делаю аналог программы в учебных целях, задачка такая есть дата рождения и дата выдачи паспорта. Надо чтобы в условии были такие моменты как просрочка паспорта. Использую такой вот код

... QDateEdit date_edit_birth,date_edit_start; ... QDate dateOfBirth= ui->date_edit_birth->date();     QDate currentDate= QDate::currentDate();     int currentAge = currentDate.year() -  dateOfBirth.year();     if (dateOfBirth.month() > currentDate.month() || (dateOfBirth.month() == currentDate.month() && dateOfBirth.day() > currentDate.day()))         currentAge--;      if ((currentAge > 14 && ui->date_edit_start->date() < ui->date_edit_birth->date().addYears(14))             || (currentAge > 20 && ui->date_edit_start->date() < ui->date_edit_birth->date().addYears(20))             || (currentAge > 45 && ui->date_edit_start->date() < ui->date_edit_birth->date().addYears(45)))     {         QMessageBox::warning(this, "Некорректное заполнение данных!", "Паспорт просрочен!");         return;     } ...

... QDateEdit date_edit_birth,date_edit_start; ... QDate dateOfBirth= ui->date_edit_birth->date(); QDate currentDate= QDate::currentDate(); int currentAge = currentDate.year() - dateOfBirth.year(); if (dateOfBirth.month() > currentDate.month() || (dateOfBirth.month() == currentDate.month() && dateOfBirth.day() > currentDate.day())) currentAge--; if ((currentAge > 14 && ui->date_edit_start->date() < ui->date_edit_birth->date().addYears(14)) || (currentAge > 20 && ui->date_edit_start->date() < ui->date_edit_birth->date().addYears(20)) || (currentAge > 45 && ui->date_edit_start->date() < ui->date_edit_birth->date().addYears(45))) { QMessageBox::warning(this, "Некорректное заполнение данных!", "Паспорт просрочен!"); return; } ...

Но не уверен что правильно считает, иногда появляется окошко с предупреждением.

Дополнительно:

Вообще-то по закону срок получения нового паспорта - 90 дней. И смены, насколько я помню - тоже.

  • А чтобы преодолеть неуверенность в работе такого примитивного алгоритма - элементарно набивается достаточное количество тестовых данных и по ним прогоняется проверка, адекватный ответ выдает алгоритм или нет.
  • иногда появляется окошко с предупреждением.

    А на каких данных?

  • Ответы:

    QDate dateOfBirth = ui->date_edit_birth->date();
    QDate currentDate = QDate::currentDate();
    int currentAge = dateOfBirth.daysTo(currentDate) / 365;

    if (currentAge < 14) {
    QMessageBox::warning(this, "Некорректное заполнение данных!", "Паспорт не выдается лицам младше 14 лет!");
    return;
    }

    QDate passportExpiryDate = ui->date_edit_birth->date().addYears(20); // Предполагаем срок действия паспорта - 20 лет

    if (ui->date_edit_start->date() > passportExpiryDate) {
    QMessageBox::warning(this, "Некорректное заполнение данных!", "Паспорт просрочен!");
    return;
    }

    • а в 45 лет?
    Нужно решить такую задачу?

    Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

    Заказать помощь
    Лучший ответ
    1
    Дмитрий К. Ответ

    Для правильного форматирования и сравнения дат в PHP рекомендуется использовать объекты класса DateTime. Этот класс предоставляет множество методов для работы с датами и временем, а также обладает возможностью сравнения дат.

    Примеры использования класса DateTime для правильного сравнения дат:

    $date1 = new DateTime('2022-01-01');
    $date2 = new DateTime('2022-01-15');
     
    if ($date1  $date2) {
        echo 'Дата 1 больше даты 2';
    } else {
        echo 'Даты равны';
    }

    $date1 = new DateTime('2022-01-01'); $date2 = new DateTime('2022-01-15'); if ($date1 $date2) { echo 'Дата 1 больше даты 2'; } else { echo 'Даты равны'; }

    В данном примере мы создаем два объекта DateTime с указанными датами и сравниваем их с помощью операторов сравнения. Таким образом, мы можем определить, какая дата больше, меньше или равна другой.

    Также класс DateTime позволяет выполнять различные операции с датами, такие как добавление и вычитание дней, месяцев, часов и т.д.:

    $date = new DateTime('now');
    $date-&gt;modify('+1 day');
    echo $date-&gt;format('Y-m-d');

    $date = new DateTime('now'); $date-&gt;modify('+1 day'); echo $date-&gt;format('Y-m-d');

    В этом примере мы создаем объект DateTime с текущей датой и временем, затем добавляем к нему один день и выводим полученную дату в формате 'Y-m-d'.

    Используя класс DateTime, можно уверенно работать с датами и временем в PHP, выполнять операции с ними и сравнивать их корректно.

    Другие ответы (0)

    Пока нет других ответов. Будьте первым, кто поможет автору.

    Ответить на вопрос

    комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Вам также может быть интересно