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过程中的一些注意点的总结
Oct 25 PHP
php json转换成数组形式代码分享
Nov 10 PHP
Yii学习总结之数据访问对象 (DAO)
Feb 22 PHP
php约瑟夫问题解决关于处死犯人的算法
Mar 23 PHP
PHP常用设计模式之委托设计模式
Feb 13 PHP
PHP实现的DES加密解密实例代码
Apr 06 PHP
你不知道的文件上传漏洞php代码分析
Sep 29 PHP
简单解决微信文章图片防盗链问题
Dec 17 PHP
PHP实现的登录页面信息提示功能示例
Jul 24 PHP
PHP-X系列教程之内置函数的使用示例
Oct 16 PHP
ThinkPHP防止重复提交表单的方法实例分析
May 10 PHP
PHP Ajax跨域问题解决方案代码实例
Aug 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常用的三种设计模式
2017/02/17 PHP
ThinkPHP模板标签eq if 中区分0,null,false的方法
2017/03/24 PHP
Laravel学习基础之migrate的使用教程
2017/10/11 PHP
tp5递归 无限级分类详解
2019/10/18 PHP
PHP pthreads v3下worker和pool的使用方法示例
2020/02/21 PHP
使用jquery实现的一个图片延迟加载插件(含图片延迟加载原理)
2014/06/05 Javascript
jQuery判断元素上是否绑定了指定事件的方法
2015/03/17 Javascript
jQuery轮播图效果精简版完整示例
2016/09/04 Javascript
NodeJS使用formidable实现文件上传
2016/10/27 NodeJs
概述BootStrap中role=&quot;form&quot;及role作用角色
2016/12/08 Javascript
Js apply方法详解
2017/02/16 Javascript
bootstrap是什么_动力节点Java学院整理
2017/07/14 Javascript
JavaScript判断变量名是否存在数组中的实例
2017/12/28 Javascript
浅谈Vue2.0父子组件间事件派发机制
2018/01/08 Javascript
用p5.js制作烟花特效的示例代码
2018/03/21 Javascript
使用FileReader API创建Vue文件阅读器组件
2018/04/03 Javascript
mint-ui在vue中的使用示例
2018/04/05 Javascript
[56:41]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 Newbee vs OG
2018/04/01 DOTA
[58:59]完美世界DOTA2联赛PWL S3 access vs CPG 第一场 12.13
2020/12/16 DOTA
python里将list中元素依次向前移动一位
2014/09/12 Python
Python使用matplotlib绘制正弦和余弦曲线的方法示例
2018/01/06 Python
解决Python2.7读写文件中的中文乱码问题
2018/04/12 Python
深入理解Django自定义信号(signals)
2018/10/15 Python
Python中对数组集进行按行打乱shuffle的方法
2018/11/08 Python
Python实现网页截图(PyQT5)过程解析
2019/08/12 Python
音频处理 windows10下python三方库librosa安装教程
2020/06/20 Python
使用Python将语音转换为文本的方法
2020/08/10 Python
python 写一个性能测试工具(一)
2020/10/24 Python
浅析css3中matrix函数的使用
2016/06/06 HTML / CSS
美国紧身牛仔裤品牌:NYDJ
2017/05/24 全球购物
《我的信念》教学反思
2014/02/15 职场文书
幼师中班个人总结
2015/02/12 职场文书
2019让人心动的商业计划书
2019/06/27 职场文书
搞笑Gif:这么白这么长的腿像极了一楼的女朋友
2022/03/21 杂记
Linux服务器离线安装 nginx的详细步骤
2022/06/16 Servers
HttpClient实现表单提交上传文件
2022/08/14 Java/Android