[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
*
*/
<?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
*
*/
相关文章推荐
- Yii2创建多界面主题(Theme)
- (总结)隐藏PHP版本与PHP基本安全设置
- logstash elasticsearch output插件的bulk提交
- yii2 restful api搭建 实例
- yii2.0 集成七牛php sdk
- php 连接access、sqlserver
- PHP和JS的数据交互
- Ubuntu 配置 LAMP 实现开发 thinkphp框架
- thinkphp where()条件查询
- PHP学习笔记
- php下获取时间的毫秒表示,非时间戳
- php闭包函数简析
- php获取远程文件内容的函数
- php 判断当前的操作系统的方法
- 安装phalcon
- php+ajax实现无刷新数据分页的办法
- phpcms v9二次开发笔记
- PHP函数
- yafphp框架
- php开启mysqli扩展之后如何连接数据库