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程序设计有所帮助。