因需要显示对象的年龄,在网上找了几个看着不是太理想,自己写了一个,取得两个时间戳相差年龄的函数,显示结果为x岁x月x天,年月为零时,不显示年月,原理为:年月日相减,数不够的,按年和月的进位借数,最终得到年月日的时间值。
<?PHP /* * ============================== * 此方法由 mantye 提供 * http://my.oschina.net/u/223350 * @date 2014-07-22 * ============================== * @description 取得两个时间戳相差的年龄 * @before 较小的时间戳 * @after 较大的时间戳 * @return str 返回相差年龄y岁m月d天 **/ function datediffage($before, $after) { if ($before>$after) { $b = getdate($after); $a = getdate($before); } else { $b = getdate($before); $a = getdate($after); } $n = array(1=>31,2=>28,3=>31,4=>30,5=>31,6=>30,7=>31,8=>31,9=>30,10=>31,11=>30,12=>31); $y=$m=$d=0; if ($a[‘mday‘]>=$b[‘mday‘]) { //天相减为正 if ($a[‘mon‘]>=$b[‘mon‘]) {//月相减为正 $y=$a[‘year‘]-$b[‘year‘];$m=$a[‘mon‘]-$b[‘mon‘]; } else { //月相减为负,借年 $y=$a[‘year‘]-$b[‘year‘]-1;$m=$a[‘mon‘]-$b[‘mon‘]+12; } $d=$a[‘mday‘]-$b[‘mday‘]; } else { //天相减为负,借月 if ($a[‘mon‘]==1) { //1月,借年 $y=$a[‘year‘]-$b[‘year‘]-1;$m=$a[‘mon‘]-$b[‘mon‘]+12;$d=$a[‘mday‘]-$b[‘mday‘]+$n[12]; } else { if ($a[‘mon‘]==3) { //3月,判断闰年取得2月天数 $d=$a[‘mday‘]-$b[‘mday‘]+($a[‘year‘]%4==0?29:28); } else { $d=$a[‘mday‘]-$b[‘mday‘]+$n[$a[‘mon‘]-1]; } if ($a[‘mon‘]>=$b[‘mon‘]+1) { //借月后,月相减为正 $y=$a[‘year‘]-$b[‘year‘];$m=$a[‘mon‘]-$b[‘mon‘]-1; } else { //借月后,月相减为负,借年 $y=$a[‘year‘]-$b[‘year‘]-1;$m=$a[‘mon‘]-$b[‘mon‘]+12-1; } } } return ($y==0?‘‘:$y.‘岁‘).($m==0?‘‘:$m.‘个月‘).($d==0?‘‘:$d.‘天‘); } ?>
PHP年龄计算 取得两个时间戳相差的年龄年月日显示,布布扣,bubuko.com
原文:http://my.oschina.net/u/223350/blog/293687