php计算年龄精准到年月日
本文实例讲述了php计算年龄精准到年月日的方法。分享给大家供大家参考。具体如下:
<?php /* *Tochangethislicenseheader,chooseLicenseHeadersinProjectProperties. *Tochangethistemplatefile,chooseTools|Templates *andopenthetemplateintheeditor. */ classAge{ /** *计算年龄精准到年月日 *@paramtype$birthday *@returnarray */ publicfunctioncalAge($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)); returnarray('year'=>$years,'month'=>$m,'day'=>$d,'not_birth'=>$not_birth); } /** *只能用于一年内计算 *@paramtype$ymd *@paramtype$bymd */ publicfunctiongetMD($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; } returnarray($month,$day); } privatefunction_getMothDay($year,$month){ switch($month){ case1: case3: case5: case7: case8: case10: case12: $day=31; break; case2: $day=(intval($year%4)?28:29);//能被4除尽的为29天其他28天 break; default: $day=30; break; } return$day; } } $cage=newAge(); $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', ); echodate('Y-m-d'); echo'<pre>'; foreach($testas$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程序设计有所帮助。