在php中计算年龄

时间:2014-04-24 21:30:04

标签: php

我需要在php中计算年龄。 我使用这个解决方案:

$birthdate = '1986-09-16';

$_age = floor( (strtotime(date('Y-m-d')) - strtotime($birthDate)) / 31556926);

来自here

一切正常,但例如

$birthday = '1194-01-06'

$birthday = '1900-01-01'

结果总是 44

如果$birthday = '1910-11-09'一切正常,结果 103 。为什么呢?

注意:由于某些问题,我不想使用diff()函数。

编辑:

早些时候我遇到了diff(),有些

的问题
  

警告范围()

显示在处理期间和网站刷新后一切都很好...我找不到解决方案来修复它,我读到的某些地方使用diff()可能会导致它。所以我尝试了其他解决方案,直到现在才有效。

最后我使用了这个解决方案:

$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

试。

3 个答案:

答案 0 :(得分:1)

这是因为您正在使用date使用timestamp,其默认值为time(),该默认值基于1970年1月1日开始的EPOCH 00:00:00 GMT - 自1970年以来的44年。

有关详细信息,请参阅PHP手册:http://php.net/manual/en/function.date.php

答案 1 :(得分:0)

您是否阅读了strtotime()手册(https://php.net/manual/en/function.strtotime.php)?

该函数希望给出一个包含英文日期格式的字符串,并尝试将该格式解析为Unix时间戳(自1970年1月1日00:00:00 UTC以来的秒数),相对于现在给出的时间戳,或者当前时间(如果现在没有提供)。

答案 2 :(得分:0)

整数限制问题:

  1. 您的操作系统无法处理负时间戳
  2. 32位系统上有符号整数的最大整数值
  3. strtotime()

    时间戳的有效范围通常是从星期五,1901年12月13日20:45:54 UTC 星期二,2038年1月19日03:14:07 UTC 。 (这些是与32位有符号整数的最小值和最大值相对应的日期。)

    此外,并非所有平台都支持负时间戳,因此您的日期范围可能不会早于Unix时代( 1970年1月1日)。