用php计算年龄
我需要用php计算年龄。 我使用这个解决方案:用php计算年龄,php,Php,我需要用php计算年龄。 我使用这个解决方案: $birthdate = '1986-09-16'; $_age = floor( (strtotime(date('Y-m-d')) - strtotime($birthDate)) / 31556926); $birthDate = from database in timestamp format... $birth = new \DateTime($birthDate); $now = new \DateTime; $age = $no
$birthdate = '1986-09-16';
$_age = floor( (strtotime(date('Y-m-d')) - strtotime($birthDate)) / 31556926);
$birthDate = from database in timestamp format...
$birth = new \DateTime($birthDate);
$now = new \DateTime;
$age = $now->diff($birth)->y;
从
一切正常,但例如,如果
生日='1194-01-06'
或
$birth='1900-01-01'
结果总是44
如果$birth='1910-11-09'
一切又恢复正常,结果是103。为什么?
注意:由于一些问题,我不想使用diff()函数
编辑:
早些时候,我对diff()有一些问题
警告范围()
显示在处理过程中和网站刷新后,一切都很好再次。。。我找不到解决方法,在某个地方我读到使用diff()可能导致它。所以我尝试了另一种解决方案,它奏效了。。。直到现在
最后我使用了这个解决方案:
$birthdate = '1986-09-16';
$_age = floor( (strtotime(date('Y-m-d')) - strtotime($birthDate)) / 31556926);
$birthDate = from database in timestamp format...
$birth = new \DateTime($birthDate);
$now = new \DateTime;
$age = $now->diff($birth)->y;
我随机得到
Warning
range(): step exceeds the specified range
再次说明。这是因为您使用的是
date
,即使用默认值为time()
的时间戳,该值基于1970年1月1日00:00:00 GMT开始的历元-自1970年以来已有44年
有关这方面的更多信息可以在PHP手册中找到:您是否阅读了strotime()
Manual()
函数期望得到一个包含英文日期格式的字符串,并将尝试将该格式解析为Unix时间戳(自1970年1月1日00:00:00 UTC以来的秒数),相对于now中给出的时间戳,或者如果now未提供,则相对于当前时间。整数限制问题,或者:
您的操作系统不处理负时间戳
32位系统上有符号整数的最大整数值
时间戳的有效范围通常为1901年12月13日星期五20:45:54 UTC至2038年1月19日星期二03:14:07 UTC。(这些日期对应于32位有符号整数的最小值和最大值。)
此外,并非所有平台都支持负时间戳,因此您的日期范围可能被限制为不早于Unix纪元(1970年1月1日)。。DateTime::diff()
有哪些“问题”?另外strotime(date('Y-m-d'))
是获取time()
的一种可怕的迂回方式。不确定发生了什么,但最好从1970-01年开始尝试这种strotime-01@DarkSide:是的,并使用负整数反向工作。@DarkSide认为这是基于手册:(参见Changelog下)是的,我对PHP的所有了解都是从那里获得的:-)我更改了措辞,“基于”听起来更好;)