当用户尝试向我的网站注册时,我需要验证它们是否足够老。我试图使用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>";
}
?>
答案 0 :(得分:3)
尝试:
$registration = new DateTime(implode('-', array($yob, $mob, $dob)));
$now = new DateTime();
var_dump($now->diff($registration)->y);
这将为您提供实际年龄,考虑数月,日和闰年。
答案 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 { ...