本文实例讲述了php计算年龄精准到年月日的方法。分享给大家供大家参考。具体如下:

<?php /* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ class Age {     /**   * 计算年龄精准到年月日   * @param type $birthday   * @return array   */   public function calAge($birthday) {    list($byear, $bmonth, $bday) = explode("-", $birthday);    list($year, $month, $day) = explode("-", date("Y-m-d"));    $bmonth = intval($bmonth);    $bday = intval($bday);    if ($bmonth < 10) {      $bmonth = "0" . $bmonth;    }    if ($bday < 10) {      $bday = "0" . $bday;    }    $bi = intval($byear . $bmonth . $bday);    $ni = intval($year . $month . $day);    $not_birth = 0;    if ($bi > $ni) {      $not_birth = 1;      $tmp = array($byear, $bmonth, $bday);      list($byear, $bmonth, $bday) = array($year, $month, $day);      list($year, $month, $day) = $tmp;      list($bi, $ni) = array($ni, $bi);    }    $years = 0;    while (($bi + 10000) <= $ni) {//先取岁数      $bi += 10000;      $years++;      $byear++;    }//得到岁数后 抛弃年    list($m, $d) = $this->getMD(array($year, $month, $day), array($byear, $bmonth, $bday));    return array("year" => $years, "month" => $m, "day" => $d, "not_birth" => $not_birth);  }   /**   * 只能用于一年内计算   * @param type $ymd   * @param type $bymd   */  public function getMD($ymd, $bymd) {    list($y, $m, $d) = $ymd;    list($by, $bm, $bd) = $bymd;    if (($m . $d) < ($bm . $bd)) {      $m +=12;    }    $month = 0;    while ((($bm . $bd) + 100) <= ($m . $d)) {      $bm++;      $month++;    }    if ($bd <= $d) {//同处一个月      $day = $d - $bd;    } else {//少一个月      $mdays = $bm > 12 ? $this->_getMothDay( ++$by, $bm - 12) : $this->_getMothDay($by, $bm);      $day = $mdays - $bd + $d;    }    return array($month, $day);  }   private function _getMothDay($year, $month) {    switch ($month) {      case 1:      case 3:      case 5:      case 7:      case 8:      case 10:      case 12:        $day = 31;        break;      case 2:        $day = (intval($year % 4) ? 28 : 29); //能被4除尽的为29天其他28天        break;      default:        $day = 30;        break;    }    return $day;  } } $cage = new Age();$test = array(  "1990-06-12",  "1990-07-13",  "1990-08-16",  "1990-10-10",  "1990-10-13",  "1990-10-15",  "1990-11-9",  "1990-11-22",  "2016-11-22",  "2016-8-22",  "2016-10-13",);echo date("Y-m-d");echo "<pre>";foreach($test as $v){  $tmp = $cage->calAge($v);  echo $v , ":", $tmp["year"], "年", $tmp["month"], "月", $tmp["day"], "天", ";", $tmp["not_birth"], "<br>";}echo "</pre>" ;  /*  运行结果:  2015-10-13  1990-06-12:25年4月1天;0  1990-07-13:25年3月0天;0  1990-08-16:25年1月27天;0  1990-10-10:25年0月3天;0  1990-10-13:25年0月0天;0  1990-10-15:24年11月28天;0  1990-11-9:24年11月4天;0  1990-11-22:24年10月21天;0  2016-11-22:1年1月9天;1  2016-8-22:0年10月9天;1  2016-10-13:1年0月0天;1  *  */

希望本文所述对大家学习php程序设计有所帮助。