我正在尝试从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}
答案 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)
答案 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)
。