如何使用getdate()来验证用户的年龄?

时间:2016-03-23 22:17:25

标签: php

当用户尝试向我的网站注册时,我需要验证它们是否足够老。我试图使用getdate()函数执行此操作。

我理解getdate()的作用,但我很难理解如何正确使用它。

<?php
$fn = $_POST["fullname"];
$un = $_POST["username"];
$pw = $_POST["password"];
$dob = $_POST["dayofbirth"];
$mob = $_POST["monthofbirth"];
$yob = $_POST["yearofbirth"];

$date = getdate();

if ( $yob =$yob>= $date["year"]-16)
{
    echo "Too young to register!";
}
elseif ($yob <=1899)
{
    echo "Don't be silly, you are not that old!";
}
else 
{
    echo "<h1>Thank you for registering with us!</h1>";
    echo "<p> You have successfully registered with these details:
          <br>Your full name :$fn<br> Username: $un 
          <br>Date of birth: $dob $mob $yob</p>";
}
?>

2 个答案:

答案 0 :(得分:3)

尝试:

$registration = new DateTime(implode('-', array($yob, $mob, $dob)));
$now = new DateTime();

var_dump($now->diff($registration)->y);

这将为您提供实际年龄,考虑数月,日和闰年。

DateTime Class Manual

答案 1 :(得分:0)

如果您将此if ( $yob =$yob>= $date["year"]-16)更改为if ( $yob >= $date["year"]-16),那么这将执行您期望的操作,并且它将在某些的时间内正常工作。问题在于,根据当年某人的生日与当前日期的比较,只需减去这样的年份通常会得到错误的结果。

更好的方法是使用DateTime::diff方法计算年龄。这应该可以让你知道这个人的确切年龄。

$age = date_create("$yob-$mob-$dob")->diff(new DateTime());

然后,您可以比较生成的DateInterval对象的年份属性以验证年龄。

if ( $age->y < 16) {
    echo "Too young to register!";
} elseif ($age->y > 117) {
    echo "Don't be silly, you are not that old!";
} else { ...