В своем коде я пытаюсь проверить, превышает ли возраст пользователя 18 лет.
Для моего поля ввода я использую ввод даты начальной загрузки. Код отлично работает, когда я набираю дату, но когда я использую средство выбора даты, чтобы выбрать дату, оно всегда возвращает true.
Вот моя функция:
$date = $_POST['birthdate'];
$orderdate = explode('-', $date);
$byr = $orderdate[0];
$bmon = $orderdate[1];
$bday = $orderdate[2];
function check21 ($bday, $bmon, $byr) {
if (date('Y') - $byr > 18) { return true; } else {
if (date('Y') - $byr = 18) {
if (date('m') - $bmon > 0) { return true; } else {
if (date('m') - $bmon = 0) {
if (date('d') - $bday >= 0) { return true; }
}
}
}
}
return false;
}
if (check21($bday, $bmon, $byr)) {
echo 'user is above 18';
} else {
echo 'user is not 18 years old';
}
И вот мое поле ввода даты:
<div class="form-group">
<input type="date" name="birthdate" class="form-control input-mini login-input" required>
</div>
Кто-нибудь знает, как это исправить?
Предполагая, что вы используете этот плагин, попробуйте установить формат даты на JavaScript:
$(document).ready(function() {
$('.datepicker').datepicker({
format: 'yyyy-mm-dd'
});
});
И на сервере вы можете улучшить свой код следующим образом:
<?php
$date = $_POST['birthdate'] ?? null; // do some validation if you want
$birthdate = DateTime::createFromFormat('Y-m-d', $date); // create a datetime instance, result will be false if $date has the wrong format
function check21($birthdate) {
// check if the today date minus 18 years is prior to the birth date
return $birthdate <= (new DateTime())->modify('-18 years');
}
if (check21($birthdate)) {
echo 'user is above 18';
} else {
echo 'user is not 18 years old';
}
Других решений пока нет …