php计算年龄精准到年月日


Posted in PHP onNovember 17, 2015

本文实例讲述了php计算年龄精准到年月日的方法。分享给大家供大家参考。具体如下:

<?php
 
/*
 * 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.
 */
 
class Age {
   
  /**
   * 计算年龄精准到年月日
   * @param type $birthday
   * @return array
   */
 
  public function calAge($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));
    return array('year' => $years, 'month' => $m, 'day' => $d, 'not_birth' => $not_birth);
  }
 
  /**
   * 只能用于一年内计算
   * @param type $ymd
   * @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;
    } else {//少一个月
      $mdays = $bm > 12 ? $this->_getMothDay( ++$by, $bm - 12) : $this->_getMothDay($by, $bm);
      $day = $mdays - $bd + $d;
    }
    return array($month, $day);
  }
 
  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:
        $day = (intval($year % 4) ? 28 : 29); //能被4除尽的为29天其他28天
        break;
      default:
        $day = 30;
        break;
    }
    return $day;
  }
 
}
 
$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',
  '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->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程序设计有所帮助。

PHP 相关文章推荐
使用php+xslt在windows平台上
Oct 09 PHP
php学习之 认清变量的作用范围
Jan 26 PHP
PHP操作mysql函数详解,mysql和php交互函数
May 19 PHP
php读取二进制流(C语言结构体struct数据文件)的深入解析
Jun 13 PHP
Codeigniter整合Tank Auth权限类库详解
Jun 12 PHP
使用php方法curl抓取AJAX异步内容思路分析及代码分享
Aug 25 PHP
php时间函数用法分析
May 28 PHP
thinkPHP5.0框架引入Traits功能实例分析
Mar 18 PHP
php实现评论回复删除功能
May 23 PHP
PHP基于自定义类随机生成姓名的方法示例
Aug 05 PHP
php使用curl_init()和curl_multi_init()多线程的速度比较详解
Aug 15 PHP
php提取微信账单的有效信息
Oct 01 PHP
php实现简单的上传进度条
Nov 17 #PHP
PHP安装threads多线程扩展基础教程
Nov 17 #PHP
超详细的php用户注册页面填写信息完整实例(附源码)
Nov 17 #PHP
教大家制作简单的php日历
Nov 17 #PHP
PHP YII框架开发小技巧之模型(models)中rules自定义验证规则
Nov 16 #PHP
PHP Yii框架之表单验证规则大全
Nov 16 #PHP
Yii2.0高级框架数据库增删改查的一些操作
Nov 16 #PHP
You might like
php实现的遍历文件夹下所有文件,编辑删除
2010/01/05 PHP
php遍历树的常用方法汇总
2015/06/18 PHP
详解WordPress中调用评论模板和循环输出评论的PHP函数
2016/01/05 PHP
JavaScript 不只是脚本
2007/05/30 Javascript
javascript 按键事件(兼容各浏览器)
2013/12/20 Javascript
用jquery仿做发微博功能示例
2014/04/18 Javascript
自写的jQuery异步加载数据添加事件
2014/05/15 Javascript
node.js中的fs.open方法使用说明
2014/12/17 Javascript
浅析JS动态创建元素【两种方法】
2016/04/20 Javascript
js操作XML文件的实现方法兼容IE与FireFox
2016/06/25 Javascript
jQuery设置聚焦并使光标位置在文字最后的实现方法
2016/08/02 Javascript
javascript中的面向对象
2017/03/30 Javascript
JavaScript 获取元素在父节点中的下标(推荐)
2017/06/28 Javascript
JavaScript实现设置默认日期范围为最近40天的方法分析
2017/07/12 Javascript
bootstrap实现嵌套模态框的实例代码
2020/01/10 Javascript
vue中destroyed方法的使用说明
2020/07/21 Javascript
[01:38]完美世界DOTA2联赛PWL S3 集锦第四期
2020/12/21 DOTA
python getopt 参数处理小示例
2009/06/09 Python
python中的sort方法使用详解
2014/07/25 Python
Python编程深度学习绘图库之matplotlib
2018/12/28 Python
使用 Python 合并多个格式一致的 Excel 文件(推荐)
2019/12/09 Python
Python3连接Mysql8.0遇到的问题及处理步骤
2020/02/17 Python
python实现将列表中各个值快速赋值给多个变量
2020/04/02 Python
Python异常处理机制结构实例解析
2020/07/23 Python
CSS3中设置3D变形的transform-style属性详解
2016/05/23 HTML / CSS
CSS3的calc()做响应模式布局的实现方法
2017/09/06 HTML / CSS
俄罗斯购买内衣网站:Trusiki
2020/08/22 全球购物
老师对学生的寄语
2014/04/09 职场文书
我的老师教学反思
2014/05/01 职场文书
会计专业应届生自荐信
2014/06/28 职场文书
2014党员民主评议个人总结
2014/09/10 职场文书
大学生党员个人对照检查材料范文
2014/09/25 职场文书
2015年小学语文教学工作总结
2015/05/25 职场文书
Golang 正则匹配效率详解
2021/04/25 Golang
详解JAVA中的OPTIONAL
2021/06/14 Java/Android
python turtle绘图
2022/05/04 Python