用于计算年龄 精确到天
    		
            - /*
 -  * 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 '
';  - foreach($test as $v){
 -     $tmp = $cage->calAge($v);
 -     echo $v , ':', $tmp['year'], '年', $tmp['month'],
 -  '月', $tmp['day'], '天', ';', $tmp['not_birth'], '
 '; - }
 - echo '' ;
 - /*
 -     运行结果:
 -     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
 -  * 
 -  */
 
  |