PHP年齡計算 取得兩個時間戳相差的年齡年月日顯示

因須要顯示對象的年齡,在網上找了幾個看着不是太理想,本身寫了一個,取得兩個時間戳相差年齡的函數,顯示結果爲x歲x月x天,年月爲零時,不顯示年月,原理爲:年月日相減,數不夠的,按年和月的進位借數,最終獲得年月日的時間值。css

<?PHP
/*
 * ==============================
 * 此方法由 mantye 提供  
 * http://my.oschina.net/u/223350 
 * @date 2014-07-22
 * ==============================
 * @description    取得兩個時間戳相差的年齡
 * @before         較小的時間戳
 * @after          較大的時間戳
 * @return str     返回相差年齡y歲m月d天
**/
function datediffage($before, $after) {
 if ($before>$after) {
  $b = getdate($after);
  $a = getdate($before);
 }
 else {
  $b = getdate($before);
  $a = getdate($after);
 }
 $n = array(1=>31,2=>28,3=>31,4=>30,5=>31,6=>30,7=>31,8=>31,9=>30,10=>31,11=>30,12=>31);
 $y=$m=$d=0;
 if ($a['mday']>=$b['mday']) { //天相減爲正
  if ($a['mon']>=$b['mon']) {//月相減爲正
   $y=$a['year']-$b['year'];$m=$a['mon']-$b['mon'];
  }
  else { //月相減爲負,借年
   $y=$a['year']-$b['year']-1;$m=$a['mon']-$b['mon']+12;
  }
  $d=$a['mday']-$b['mday'];
 }
 else {  //天相減爲負,借月
  if ($a['mon']==1) { //1月,借年
   $y=$a['year']-$b['year']-1;$m=$a['mon']-$b['mon']+12;$d=$a['mday']-$b['mday']+$n[12];
  }
  else {
   if ($a['mon']==3) { //3月,判斷閏年取得2月天數
    $d=$a['mday']-$b['mday']+($a['year']%4==0?29:28);
   }
   else {
    $d=$a['mday']-$b['mday']+$n[$a['mon']-1];
   }
   if ($a['mon']>=$b['mon']+1) { //借月後,月相減爲正
    $y=$a['year']-$b['year'];$m=$a['mon']-$b['mon']-1;
   }
   else { //借月後,月相減爲負,借年
    $y=$a['year']-$b['year']-1;$m=$a['mon']-$b['mon']+12-1;
   }
  }
 }
 return ($y==0?'':$y.'歲').($m==0?'':$m.'個月').($d==0?'':$d.'天');
}
?>
相關文章
相關標籤/搜索