0

我正在使用此代码来计算我的用户的生日:

            <?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 日。

有人可以帮我解决这个问题吗?

4

2 回答 2

3
<?php
$birth = new DateTime("$byear-$bmonth-$bday"); 
$today = new DateTime('today'); 
echo $birth->diff($today)->format('%y');
?>
于 2013-10-20T00:10:11.333 回答
1

计算某人的年龄只需要知道两件事:他们出生的年份,以及他们今年是否过生日。

由于您将出生日期作为日、月和年的单独变量,并且正在计算“今天”的年龄,因此您可以执行以下操作(注意:idate()就像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的 s 而不是嵌套?:表达式可以更容易地查看正在发生的事情,并且您不需要弄乱对mktimeand的多次调用date

于 2013-10-20T00:21:01.743 回答