我正在使用此代码计算用户的生日:
<?php
$birthDate = $bday."/".$bmonth."/".$byear;
$birthDate = explode("/", $birthDate);
$age = (date("md", date("U", mktime(0, 0, 0, $birthDate[0], $birthDate[1],
$birthDate[2]))) > date("md") ? ((date("Y")-$birthDate[2])-1):(date("Y")-$birthDate[2]));
echo $age;
?>
如果输入是任何一年中任何一个月的第23或第24天(例如,1987年2月23日),则年龄为 - 1年。它会说25岁而不是26岁。我每个月都会测试80年代后期;它始终是23日和24日。
有人可以帮我解决这个问题吗?
答案 0 :(得分:3)
<?php
$birth = new DateTime("$byear-$bmonth-$bday");
$today = new DateTime('today');
echo $birth->diff($today)->format('%y');
?>
答案 1 :(得分:1)
计算某个人的年龄时,您只需要知道两件事:他们出生的那一年,以及他们今年是否过生日。
由于您将出生日期视为日,月和年的单独变量,并计算年龄“今天”,您可以执行以下操作(注意:idate()
就像{{1} ,但是对于日期的单个方面返回一个整数,因此对于像这样的计算更有效):
date()
我认为这大致就是你要采用的方法,但真正的function calculate_age($byear, $bmonth, $bday)
{
if (
idate('m') < $bmonth
||
(
idate('m') == $bmonth
&&
idate('d') < $bday
)
)
{
// No birthday yet this year, so reduce age by 1
return idate('Y') - $byear - 1;
}
else
{
return idate('Y') - $byear;
}
}
而不是嵌套的if
表达式使得更容易看到发生了什么,而且你不需要弄乱多次调用?:
和mktime
。