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 高性能书写
Dec 11 PHP
简单的PHP缓存设计实现代码
Sep 30 PHP
基于ubuntu下nginx+php+mysql安装配置的具体操作步骤
Apr 28 PHP
PHP设置图片文件上传大小的具体实现方法
Oct 11 PHP
PHP 实现判断用户是否手机访问
Jan 21 PHP
微信公众平台之快递查询功能用法实例
Apr 14 PHP
PHP中的session安全吗?
Jan 22 PHP
PHP基于curl后台远程登录正方教务系统的方法
Oct 14 PHP
PHP使用标准库spl实现的观察者模式示例
Aug 04 PHP
PHP attributes()函数讲解
Feb 03 PHP
PHP将整数数字转换为罗马数字实例分享
Mar 17 PHP
PHP中上传文件打印错误错误类型分析
Apr 14 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&amp;mysql(一)
2006/10/09 PHP
php文件夹的创建与删除方法
2015/01/24 PHP
使用PHP如何实现高效安全的ftp服务器(一)
2015/12/20 PHP
php使用PDO下exec()函数查询执行后受影响行数的方法
2017/03/28 PHP
用javascript实现画板的代码
2007/09/05 Javascript
js调用flash的效果代码
2008/04/26 Javascript
使用js对select动态添加和删除OPTION示例代码
2013/08/12 Javascript
select多选 multiple的使用示例
2014/06/16 Javascript
javascript实现校验文件上传控件实例
2015/04/20 Javascript
JavaScript弹窗基础篇
2016/04/27 Javascript
JS加载器如何动态加载外部js文件
2016/05/26 Javascript
jQuery实现立体式数字动态增加(animate方法)
2016/12/21 Javascript
vue better-scroll插件使用详解
2018/01/25 Javascript
微信自定义分享链接信息(标题,图片和内容)实现过程详解
2019/09/04 Javascript
jQuery开发仿QQ版音乐播放器
2020/07/10 jQuery
JS运算符优先级与表达式示例详解
2020/09/04 Javascript
[00:33]DOTA2上海特级锦标赛 CDEC战队宣传片
2016/03/04 DOTA
python list 合并连接字符串的方法
2013/03/09 Python
python操作mysql中文显示乱码的解决方法
2014/10/11 Python
分享Python字符串关键点
2015/12/13 Python
Python实现的自定义多线程多进程类示例
2018/03/23 Python
详解Python3.6的py文件打包生成exe
2018/07/13 Python
Python + Flask 实现简单的验证码系统
2019/10/01 Python
python等待10秒执行下一命令的方法
2020/07/19 Python
Python根据URL地址下载文件并保存至对应目录的实现
2020/11/15 Python
三星俄罗斯授权在线商店:Samsung俄罗斯
2019/09/28 全球购物
一个C/C++编程面试题
2013/11/10 面试题
Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?
2014/07/27 面试题
毕业研究生的自我鉴定
2013/11/30 职场文书
查环查孕证明
2014/01/10 职场文书
坚定理想信念心得体会
2014/03/11 职场文书
学习决心书
2014/03/11 职场文书
计算机专业毕业生求职信
2014/04/30 职场文书
2014年小学数学工作总结
2014/12/12 职场文书
企业办公室主任岗位职责
2015/04/01 职场文书
员工手册编写范本
2015/05/14 职场文书