您的位置:首页 > 编程语言 > PHP开发

[PHP代码] 计算年龄 精确到天

2015-11-02 17:59 651 查看
用于计算年龄 精确到天

<?php

/*www.kmhxyyfk.com

* 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.

*/

www.kmhxyyfk.com

class Age {

/**

* 计算年龄精准到年月日

* @param type $birthday

* @return arraywww.kmhxyyfk.com

*/

public function calAge($birthday) {

list($byear, $bmonth, $bday) = explode('-', $birthday);

list($year,www.kmhxyyfk.com $month, $day) = explode('-', date('Y-m-d'));

$bmonth = intval($bmonth);

$bday = intval($bday);

if ($bmonth < 10) {

$bmonth = '0' . $bmonth;www.kmhxyyfk.com

}

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($nwww.kmhxyyfk.comwww.kmhxyyfk.comi,
$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 $ymdwww.kmhxyyfk.com

* @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;www.kmhxyyfk.com

} else {//少一个月

$mdays = $bm > 12 ? $this->_getMothDay( ++$by, $bm - 12) : $this->_getMothDay($by, $bm);

$day = $mdays - $bd + $d;

}

return array($month, $day);

}

www.kmhxyyfk.com

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:www.kmhxyyfk.com

$day = (intval($year % 4) ? 28 : 29); //能被4除尽的为29天其他28天

break;

default:

$day = 30;

break;

}

return $day;

}

}

www.kmhxyyfk.com

$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',www.kmhxyyfk.com

'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->calAgwww.kmhxyyfk.come($v);

echo $v , ':', $tmp['year'], '年', $tmp['month'],

'月', $tmp['day'], '天', ';', $tmp['not_birth'], '<br>';

}

echo '</pre>' ;www.kmhxyyfk.com

/*

运行结果:

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

*

*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: