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 相关文章推荐
Content-type 的说明
Oct 09 PHP
如何实现给定日期的若干天以后的日期
Oct 09 PHP
php学习之 数组声明
Jun 09 PHP
解析PHP实现多进程并行执行脚本
Jun 18 PHP
PHP5各个版本的新功能和新特性总结
Mar 16 PHP
php json转换成数组形式代码分享
Nov 10 PHP
php递归调用删除数组空值元素的方法
Apr 28 PHP
php数组比较实现查找连续数的方法
Jul 29 PHP
php生成4位数字验证码的实现代码
Nov 23 PHP
PHP在innodb引擎下快速代建全文搜索功能简明教程【基于xunsearch】
Oct 14 PHP
php mysql_real_escape_string addslashes及mysql绑定参数防SQL注入攻击
Dec 23 PHP
laravel model模型处理之修改查询或修改字段时的类型格式案例
Oct 17 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
hadoop中一些常用的命令介绍
2013/06/19 PHP
解析link_mysql的php版
2013/06/30 PHP
php多线程实现方法及用法实例详解
2015/10/26 PHP
WordPress开发中短代码的实现及相关函数使用技巧
2016/01/05 PHP
thinkphp3.2中实现phpexcel导出带生成图片示例
2017/02/14 PHP
jQuery判断iframe中元素是否存在的方法
2013/05/11 Javascript
confirm的用法示例用于按钮操作时确定是否执行
2014/06/19 Javascript
JavaScript onkeypress事件入门实例(按下或按住一个键盘按键)
2014/10/17 Javascript
Javascript学习笔记之相等符号与严格相等符号
2014/11/23 Javascript
使用npm发布Node.JS程序包教程
2015/03/02 Javascript
Nodejs的express使用教程
2015/11/23 NodeJs
js实现文字超出部分用省略号代替实例代码
2016/09/01 Javascript
js带闹铃功能的倒计时代码
2016/09/29 Javascript
谈谈target=_new和_blank的不同之处
2016/10/25 Javascript
Angular的MVC和作用域
2016/12/26 Javascript
vue项目实现表单登录页保存账号和密码到cookie功能
2018/08/31 Javascript
解决vuecli3.0热更新失效的问题
2018/09/19 Javascript
微信小程序静默登录的实现代码
2020/01/08 Javascript
JavaScript实现移动端弹窗后禁止滚动
2020/05/25 Javascript
为什么JavaScript中0.1 + 0.2 != 0.3
2020/12/03 Javascript
[37:29]完美世界DOTA2联赛PWL S2 LBZS vs Forest 第二场 11.19
2020/11/19 DOTA
在Python中关于中文编码问题的处理建议
2015/04/08 Python
用Python编写一个简单的CS架构后门的方法
2018/11/20 Python
Python二叉树的镜像转换实现方法示例
2019/03/06 Python
用python3读取python2的pickle数据方式
2019/12/25 Python
python使用PIL剪切和拼接图片
2020/03/23 Python
澳大利亚当地社区首选的光学商店:1001 Optical
2019/08/24 全球购物
周生生珠宝香港官网:Chow Sang Sang(香港及海外配送)
2019/09/05 全球购物
医学专业毕业生个人求职信
2013/12/25 职场文书
廉洁教育学习材料
2014/05/19 职场文书
预防煤气中毒方案
2014/06/16 职场文书
安全口号大全
2014/06/21 职场文书
志愿者爱心公益活动策划方案
2014/09/15 职场文书
催款函怎么写
2015/06/24 职场文书
详解如何用Python实现感知器算法
2021/06/18 Python
记一次Mysql不走日期字段索引的原因小结
2021/10/24 MySQL