我想把它放在这里,因为这似乎是这个问题的最流行形式。
我对可以在PHP上找到的3种最流行的年龄函数进行了100年的比较,并将我的结果(以及函数)发布到了我的博客上。
正如你所看到那里,所有3个funcs中与二号功能只是一个细微的差别瓶坯很好。根据我的结果,我的建议是使用第3个函数,除非您想在一个人的生日上做一些特定的事情,在这种情况下,第1个函数提供了一种简单的方法来精确地做到这一点。
发现测试有小问题,而第二种方法又有问题!更新即将发布到博客!现在,我要指出的是,第二种方法仍然是我在网上找到的最受欢迎的方法,但仍然是我发现的最不正确的方法!
经过100年的回顾后,我的建议:
如果您想要一些更长的东西,以便可以包括生日之类的场合,例如:
function getAge($date) { // Y-m-d format
$now = explode("-", date('Y-m-d'));
$dob = explode("-", $date);
$dif = $now[0] - $dob[0];
if ($dob[1] > $now[1]) { // birthday month has not hit this year
$dif -= 1;
}
elseif ($dob[1] == $now[1]) { // birthday month is this month, check day
if ($dob[2] > $now[2]) {
$dif -= 1;
}
elseif ($dob[2] == $now[2]) { // Happy Birthday!
$dif = $dif." Happy Birthday!";
};
};
return $dif;
}
getAge('1980-02-29');
但是,如果您只是想知道年龄,仅此而已,那么:
function getAge($date) { // Y-m-d format
return intval(substr(date('Ymd') - date('Ymd', strtotime($date)), 0, -4));
}
getAge('1980-02-29');
有关该strtotime
方法的主要说明:
Note:
Dates in the m/d/y or d-m-y formats are disambiguated by looking at the
separator between the various components: if the separator is a slash (/),
then the American m/d/y is assumed; whereas if the separator is a dash (-)
or a dot (.), then the European d-m-y format is assumed. If, however, the
year is given in a two digit format and the separator is a dash (-, the date
string is parsed as y-m-d.
To avoid potential ambiguity, it's best to use ISO 8601 (YYYY-MM-DD) dates or
DateTime::createFromFormat() when possible.
mktime()
。似乎phpstrtotime()
用该格式错误地计算了。