Gremlin92
@Gremlin92
Целеустремленный

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

Делаю аналог программы в учебных целях, задачка такая есть дата рождения и дата выдачи паспорта. Надо чтобы в условии были такие моменты как просрочка паспорта. Использую такой вот код
...
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;
    }
...

Но не уверен что правильно считает, иногда появляется окошко с предупреждением.
  • Вопрос задан
  • 103 просмотра
Пригласить эксперта
Ответы на вопрос 1
@alek0116
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;
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы