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语言中global和$GLOBALS[]的分析 之二
Feb 02 PHP
破解.net程序(dll文件)编译和反编译方法
Jan 31 PHP
php在window iis的莫名问题的测试方法
May 14 PHP
PHP版 汉字转码的实现详解
Jun 09 PHP
解决Codeigniter不能上传rar和zip压缩包问题
Mar 07 PHP
取得单条网站评论以数组形式进行输出
Jul 28 PHP
php的XML文件解释类应用实例
Sep 22 PHP
PHP+Ajax验证码验证用户登录
Jul 20 PHP
ThinkPHP中调用PHPExcel的实现代码
Apr 08 PHP
php实现支付宝当面付(扫码支付)功能
May 30 PHP
PHP Include文件实例讲解
Feb 15 PHP
php版本CKEditor 4和CKFinder安装及配置方法图文教程
Jun 05 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
服务器web工具 php环境下
2010/12/29 PHP
PHP随机数生成代码与使用实例分析
2011/04/08 PHP
PHP+MySQL实现无极限分类栏目的方法
2015/12/23 PHP
PHP模板引擎Smarty中变量的使用方法示例
2016/04/11 PHP
解决yii2左侧菜单子级无法高亮问题的方法
2016/05/08 PHP
php获取一定范围内取N个不重复的随机数
2016/05/28 PHP
用JQUERY增删元素的代码
2012/02/14 Javascript
js操作iframe父子窗体示例
2014/05/22 Javascript
JavaScript使用Max函数返回两个数字中较大数的方法
2015/04/06 Javascript
js限制input标签中只能输入中文
2015/06/26 Javascript
JavaScript实现的经典文件树菜单效果
2015/09/08 Javascript
轻松学习jQuery插件EasyUI EasyUI表单验证
2015/12/01 Javascript
Bootstrap按钮组件详解
2016/04/26 Javascript
基于javascript数组实现图片轮播
2016/05/02 Javascript
微信小程序 后台https域名绑定和免费的https证书申请详解
2016/11/10 Javascript
详解javascript表单的Ajax提交插件的使用
2016/12/29 Javascript
axios基本入门用法教程
2017/03/25 Javascript
vue.js单页面应用实例的简单实现
2017/04/10 Javascript
Angular2使用Augury来调试Angular2程序
2017/05/21 Javascript
css和js实现弹出登录居中界面完整代码
2017/11/26 Javascript
AngularJS 应用模块化的使用
2018/04/04 Javascript
JS散列表碰撞处理、开链法、HashTable散列示例
2019/02/08 Javascript
微信小程序实现文件、图片上传功能
2020/08/18 Javascript
解决layui调用自定义方法提示未定义的问题
2019/09/14 Javascript
详解Vue.js 可拖放文本框组件的使用
2021/03/03 Vue.js
Python基于os.environ从windows获取环境变量
2020/06/09 Python
python + selenium 刷B站播放量的实例代码
2020/06/12 Python
python 爬取英雄联盟皮肤并下载的示例
2020/12/04 Python
伦敦高级内衣品牌:Agent Provocateur(大内密探)
2016/08/23 全球购物
美国一家全面的在线零售鞋类公司:SHOEBACCA
2017/01/06 全球购物
伦敦一家西班牙童装精品店:La Coqueta
2018/02/02 全球购物
Hanky Panky官方网站:内衣和睡衣
2019/07/25 全球购物
秘书行业自我鉴定范文
2013/12/30 职场文书
小溪流的歌教学反思
2014/02/13 职场文书
天河观后感
2015/06/11 职场文书
redis cluster支持pipeline的实现思路
2021/06/23 Redis