Календарь начальной загрузки не дает того же значения

В своем коде я пытаюсь проверить, превышает ли возраст пользователя 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>

Кто-нибудь знает, как это исправить?

0

Решение

Предполагая, что вы используете этот плагин, попробуйте установить формат даты на 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';
}
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]