我正在寻找一种计算一个人的年龄的方法,给定一个人的道布的格式为dd/mm/yyyy。
我正在使用下面的函数,它在几个月内一直工作得很好,直到某种故障导致while循环永远不会结束,并使整个网站陷入停顿。由于每天有近100,000个DOB使用此功能数次,因此很难确定是什么原因造成了这种情况。
有没有人有更可靠的计算年龄的方法?
//replace / with - so strtotime works
$dob = strtotime(str_replace("/","-",$birthdayDate));
$tdate = time();
$age = 0;
while( $tdate > $dob = strtotime('+1 year', $dob))
{
++$age;
}
return $age;
编辑:此函数有时似乎工作正常,但对于1986年9月14日的道布,返回"40“
return floor((time() - strtotime($birthdayDate))/31556926);
发布于 2010-09-23 17:07:53
这可以很好地工作。
<?php
//date in mm/dd/yyyy format; or it can be in other formats as well
$birthDate = "12/17/1983";
//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 is:" . $age;
?>
发布于 2010-09-23 17:06:34
$tz = new DateTimeZone('Europe/Brussels');
$age = DateTime::createFromFormat('d/m/Y', '12/02/1973', $tz)
->diff(new DateTime('now', $tz))
->y;
从PHP5.3.0开始,您可以使用方便的DateTime::createFromFormat
来确保日期不会被误认为m/d/Y
格式,并使用DateInterval
类(通过DateTime::diff
)来获取从现在到目标日期之间的年数。
发布于 2010-09-23 16:55:41
$date = new DateTime($bithdayDate);
$now = new DateTime();
$interval = $now->diff($date);
return $interval->y;
https://stackoverflow.com/questions/3776682
复制相似问题