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 相关文章推荐
ini_set的用法介绍
Jan 07 PHP
使用php伪造referer的方法 利用referer防止图片盗链
Jan 20 PHP
php获取apk包信息的方法
Aug 15 PHP
跟我学Laravel之配置Laravel
Oct 15 PHP
php中print(),print_r(),echo()的区别详解
Dec 01 PHP
php+ajax实时刷新简单实例
Feb 25 PHP
Apache PHP MySql安装配置图文教程
Aug 27 PHP
PHP中soap用法示例【SoapServer服务端与SoapClient客户端编写】
Dec 25 PHP
PHP删除数组中特定元素的两种方法
Feb 28 PHP
PHP面向对象程序设计模拟一般面向对象语言中的方法重载(overload)示例
Jun 13 PHP
php实现微信和支付宝支付的示例代码
Aug 11 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实现模仿socket请求返回页面的方法
2014/11/04 PHP
thinkPHP分组后模板无法加载问题解决方法
2016/07/12 PHP
PHP7匿名类用法分析
2016/09/26 PHP
传智播客学习之JavaScript基础篇
2009/11/13 Javascript
html向js方法传递参数具体实现
2013/08/08 Javascript
window.returnValue使用方法示例介绍
2014/07/03 Javascript
JavaScript中的包装对象介绍
2015/01/27 Javascript
jquery实现右键菜单插件
2015/03/29 Javascript
在JavaScript中访问字符串的子串
2015/07/07 Javascript
Bootstrap每天必学之响应式导航、轮播图
2016/04/25 Javascript
BootStrap入门教程(三)之响应式原理
2016/09/19 Javascript
KnockoutJS 3.X API 第四章之数据控制流foreach绑定
2016/10/10 Javascript
vue实现动态数据绑定
2017/04/28 Javascript
Vue编写多地区选择组件
2017/08/21 Javascript
js微信分享实现代码
2020/10/11 Javascript
Angular实现的日程表功能【可添加及隐藏显示内容】
2017/12/27 Javascript
详解VUE 对element-ui中的ElTableColumn扩展
2018/03/28 Javascript
Net微信网页开发 使用微信JS-SDK获取当前地理位置过程详解
2019/08/26 Javascript
Layui弹框中数据表格中可双击选择一条数据的实现
2020/05/06 Javascript
Python导出DBF文件到Excel的方法
2015/07/25 Python
Python可视化mhd格式和raw格式的医学图像并保存的方法
2019/01/24 Python
Win10用vscode打开anaconda环境中的python出错问题的解决
2020/05/25 Python
python math模块的基本使用教程
2021/01/16 Python
python爬虫破解字体加密案例详解
2021/03/02 Python
定义css设备类型-Media Queries图表简介及使用方法
2013/01/21 HTML / CSS
CSS3利用text-shadow属性实现多种效果的文字样式展现方法
2016/08/25 HTML / CSS
Calzedonia美国官网:意大利风格袜子、打底裤和沙滩装
2018/07/19 全球购物
意大利男装网店:Vrients
2019/05/02 全球购物
捷克建筑材料网上商店:DEK.cz
2021/03/06 全球购物
行政专员工作职责
2013/12/22 职场文书
2014年党员公开承诺书范文
2014/03/28 职场文书
开业庆典活动策划方案
2014/09/21 职场文书
2015年城市管理工作总结
2015/05/23 职场文书
消夏晚会主持词
2015/06/30 职场文书
div与span之间的区别与使用介绍
2021/12/06 HTML / CSS
vue3引入highlight.js进行代码高亮的方法实例
2022/04/08 Vue.js