计算PHP 5.2的年龄

时间:2012-06-27 09:20:14

标签: php expressionengine

我正在尝试从ExpressionEngine网站上的出生日期开始计算一个人的年龄。 以下代码适用于我的本地测试站点,但服务器使用的是旧版本的PHP(5.2.17),因此我遇到了错误。 有人可以建议我需要使用哪些代码吗?

{exp:channel:entries channel='zoo_visitor'}
<?php
$dob = new DateTime('{member_birthday format='%Y-%m-%d'}');
$now = new DateTime('now');
// This returns a DateInterval object.
$age = $now->diff($dob);
// You can output the date difference however you choose.
echo 'This person is ' .$age->format('%y') .' years old.';
?>
{/exp:channel:entries}

5 个答案:

答案 0 :(得分:3)

您当前的代码无效,因为PHP 5.3.0中引入了DateTime::diff

通常日期算术非常棘手,因为你必须考虑时区,夏令时和闰年,但对于像计算“全年”差异一样简单的任务,你可以很容易地做到。

这个想法是结果等于结束日期的年份减去开始日期的年份,如果开始日期的月份/日期在年内比结束日期更早,则应从中减去1。代码:

$dob = new DateTime('24 June 1940');
$now = new DateTime('now');

echo year_diff($now, $dob);

function year_diff($date1, $date2) {
    list($year1, $dayOfYear1) = explode(' ', $date1->format('Y z'));
    list($year2, $dayOfYear2) = explode(' ', $date2->format('Y z'));
    return $year1 - $year2 - ($dayOfYear1 < $dayOfYear2);
}

See it in action。请注意结果在生日指定的同一天如何增加1。

答案 1 :(得分:2)

$dob = strtotime('{member_birthday format='%Y-%m-%d'}');
$now = time();
echo 'This person is ' . (1970 - date('Y', ($now - $dob))) .' years old.';

答案 2 :(得分:1)

您只能在PHP 5.3以上使用diff

您可以尝试使用修改,它适用于5.2

$age = $now->modify('-' . $dob->format('Y') . 'year');

答案 3 :(得分:1)

经过多次搜索,我找到了答案:

<?php
    //date in mm/dd/yyyy format
    $birthDate = "{member_birthday format='%m/%d/%Y'}";
    //explode the date to get month, day and year
    $birthDate = explode("/", $birthDate);
    //get age from date or 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;
?>   

答案 4 :(得分:0)

我一直在使用它,从来没有让我失望过。 YYYYMMDD是该人的生日。

$age = floor((date('Ymd') - 'YYYYMMDD') / 10000);

如果您想更严格一些,可以使用intval函数将日期转换为整数,或者在日期之前加上(int)