使用以下函数可以计算出事件发生后已经过去了多少年。如果您想根据某人的生日确定其年龄,这将很有用。
该函数通过使用PHPstrtotime()函数标准化日期格式来工作。这是该功能的第一步,并根据日期是否有效进行排序。完成此操作后,日期将格式化为yyyy-mm-dd的标准格式,然后使用explode()函数将其拆分。然后从当前年份中减去输入日期的年份,以年为单位给出年龄。最后检查以确保日期尚未过去,并从年份值中减去一个以得出更准确的结果。这是函数:
function dateToAge($birthday){ if (($cleaned = strtotime($birthday)) === false){ return false; // 格式不可读 }; list($year, $month, $day) = explode('-', date('Y-m-d', $cleaned)); $age = date('Y') - $year; if (mktime(0,0,0,$month,$day,date('Y')) < mktime()){ // 生日还没过去,所以从年龄减去一年 $age--; }; return $age; }
这是正在使用的函数的示例:
echo '01/20/1980'.birthday('01/20/1980'); // prints 27
此功能有一个问题,就是您不确定日期是否采用标准格式。有些文化将日期设置为日/月,而其他文化则将日期设置为月/日。即使日期正确,这也可以使函数不返回任何内容。因此,以下内容:
echo '20-01-1979 '.birthday('20-01-1980');
返回false。
下面的函数通过尝试清除输入的日期来解决此问题,以便程序在最初不是有效日期时可以将其识别出来。
function dateToAge($birthday){ if (($cleaned = strtotime($birthday)) === false){ if(strpos($birthday,'/')!==false){ $birthday = explode('/',$birthday); if(count($birthday)==3){ $birthday = $birthday[1].'/'.$birthday[0].'/'.$birthday[2]; }; }; if(strpos($birthday,'-')!==false){ $birthday = explode('-',$birthday); if(count($birthday)==3){ $birthday = $birthday[1].'-'.$birthday[0].'-'.$birthday[2]; }; }; if (($cleaned = strtotime($birthday)) === false){ return false; // 格式不可读 }; }; list($year, $month, $day) = explode('-', date('Y-m-d', $cleaned)); $age = date('Y') - $year; if (mktime(0,0,0,$month,$day,date('Y')) < mktime()){ // 生日还没过去,所以从年龄减去一年 $age--; }; return $age; }