Подтвердить, если возраст старше 18 лет - PullRequest
8 голосов
/ 28 ноября 2009

Просто интересно, могу ли я сделать это, чтобы подтвердить, что пользователь ввел дату старше 18 лет?

//Validate for users over 18 only
function time($then, $min)
{
    $then = strtotime('March 23, 1988');
    //The age to be over, over +18
    $min = strtotime('+18 years', $then);
    echo $min;
    if (time() < $min) {
        die('Not 18');
    }
}

Просто наткнулся на эту функцию date_diff: http://www.php.net/manual/en/function.date-diff.php Выглядит даже более многообещающе.

Ответы [ 5 ]

22 голосов
/ 28 ноября 2009

Почему бы и нет? Единственная проблема для меня - это пользовательский интерфейс - как вы элегантно отправляете сообщение об ошибке пользователю.

С другой стороны, ваша функция может не работать должным образом, поскольку вы не указали правильный день рождения (вы используете фиксированный день рождения). Вы должны изменить «23 марта 1988 года» на $ тогда

//Validate for users over 18 only
function validateAge($then, $min)
{
    // $then will first be a string-date
    $then = strtotime($then);
    //The age to be over, over +18
    $min = strtotime('+18 years', $then);
    echo $min;
    if(time() < $min)  {
        die('Not 18'); 
    }
}

Или вы можете:

// validate birthday
function validateAge($birthday, $age = 18)
{
    // $birthday can be UNIX_TIMESTAMP or just a string-date.
    if(is_string($birthday)) {
        $birthday = strtotime($birthday);
    }

    // check
    // 31536000 is the number of seconds in a 365 days year.
    if(time() - $birthday < $age * 31536000)  {
        return false;
    }

    return true;
}
14 голосов
/ 20 января 2014

Вот упрощенный отрывок из того, что я использовал для банковской системы в Торонто, и это всегда работало идеально, учитывая високосные годы в 366 дней.

/* $dob is date of birth in format 1980-02-21 or 21 Feb 1980
 * time() is current server unixtime
 * We convert $dob into unixtime, add 18 years, and check it against server's
 * current time to validate age of under 18
 */

if (time() < strtotime('+18 years', strtotime($dob))) {
   echo 'Client is under 18 years of age.';
   exit;
}
4 голосов
/ 27 сентября 2015

Я думаю, что для этого лучше всего использовать класс DateTime.

$bday = new DateTime("22-10-1993");  
$bday->add(new DateInterval("P18Y")); //adds time interval of 18 years to bday  
//compare the added years to the current date  
if($bday < new DateTime()){   
    echo "over 18";  
}else{  
    echo "below 18";
}

DateTime :: diff также можно использовать для сравнения даты с текущей датой.

$today = new DateTime(date("Y-m-d"));
$bday = new DateTime("22-10-1993");
$interval = $today->diff($bday);
if(intval($interval->y) > 18){
    echo "older than 18";
}else{
    echo "younger than 18";
}

N / B: 1) для второго метода, если $ bday больше, чем $ сегодня, на 18 или более лет, он вернется старше, поэтому убедитесь, что введенная дата меньше, чем $ сегодня , 2) DateTime работает на php 5.2.0 и выше

2 голосов
/ 28 ноября 2009
if( strtotime("1988/03/23") < (time() - (18 * 60 * 60 * 24 * 365))) {
  print "yes";
} else {
  print "no";
}

... без учета високосных годов, однако

0 голосов
/ 13 мая 2014

Php файл

if (isset($_POST['bdate'])){
    $bdate = $_POST['bdate'];
    $age = (date("Y-m-d") - $bdate);



}  //if age if 17 or younger error msg
if ($age < 17) {
    echo "Must 18 or older.";
}
else{ //if age is 120 or greather error msg
    if ($age > 120) {
        echo "Real age please.";
    }
    else{
        echo "$age";
    }
}

HTML код:

<form action="" method="POST"> 

    <p><label>Birth Date &nbsp;&nbsp;: </label>
    <input id="bdate" type="date" name="bdate" required placeholder="" /></p>
    <input class="btn register" type="submit" name="submit" value="Register" />
</form>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...