Правильно считать даты?
Делаю аналог программы в учебных целях, задачка такая есть дата рождения и дата выдачи паспорта. Надо чтобы в условии были такие моменты как просрочка паспорта. Использую такой вот код
... 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 лет?
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Для правильного форматирования и сравнения дат в PHP рекомендуется использовать объекты класса DateTime. Этот класс предоставляет множество методов для работы с датами и временем, а также обладает возможностью сравнения дат.
Примеры использования класса DateTime для правильного сравнения дат:
$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->modify('+1 day'); echo $date->format('Y-m-d');
В этом примере мы создаем объект DateTime с текущей датой и временем, затем добавляем к нему один день и выводим полученную дату в формате 'Y-m-d'.
Используя класс DateTime, можно уверенно работать с датами и временем в PHP, выполнять операции с ними и сравнивать их корректно.