PHP函数从日期算起年龄

使用以下函数可以计算出事件发生后已经过去了多少年。如果您想根据某人的生日确定其年龄,这将很有用。

该函数通过使用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;
}