Welcome 微信登录

首页 / 网页编程 / PHP / php计算年龄精准到年月日

本文实例讲述了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-131990-06-12:25年4月1天;01990-07-13:25年3月0天;01990-08-16:25年1月27天;01990-10-10:25年0月3天;01990-10-13:25年0月0天;01990-10-15:24年11月28天;01990-11-9:24年11月4天;01990-11-22:24年10月21天;02016-11-22:1年1月9天;12016-8-22:0年10月9天;12016-10-13:1年0月0天;1**/
希望本文所述对大家学习php程序设计有所帮助。