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桌面中心(一) 创建数据库
Mar 11 PHP
PHP伪静态页面函数附使用方法
Jun 20 PHP
PHP XML操作类DOMDocument
Dec 16 PHP
php中使用ExcelFileParser处理excel获得数据(可作批量导入到数据库使用)
Aug 21 PHP
php的日期处理函数及uchome的function_coomon中日期处理函数的研究
Jan 12 PHP
php array的学习笔记
May 16 PHP
ThinkPHP CURD方法之page方法详解
Jun 18 PHP
kohana框架上传文件验证规则写法示例
Jul 14 PHP
3款值得推荐的微信开发开源框架
Oct 28 PHP
PHP图片处理之使用imagecopyresampled函数裁剪图片例子
Nov 19 PHP
利用PHP将图片转换成base64编码的实现方法
Sep 13 PHP
PHP自动生成缩略图函数的源码示例
Mar 18 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/08/09 PHP
PHP字典树(Trie树)定义与实现方法示例
2017/10/09 PHP
PHP levenshtein()函数用法讲解
2019/03/08 PHP
多个js与css文件的合并方法详细说明
2012/12/26 Javascript
wap手机图片滑动切换特效无css3元素js脚本编写
2014/07/28 Javascript
使用JavaScript 编写简单计算器
2014/11/24 Javascript
javascript异步处理工作机制详解
2015/04/13 Javascript
js实现改进的仿蓝色论坛导航菜单效果代码
2015/09/06 Javascript
JS实现的颜色实时渐变效果完整实例
2016/03/25 Javascript
Ubuntu 16.04 64位中搭建Node.js开发环境教程
2016/10/19 Javascript
谈谈JavaScript中浏览器兼容问题的写法小议
2016/12/17 Javascript
基于vue实现swipe轮播组件实例代码
2017/05/24 Javascript
关于Stream和Buffer的相互转换详解
2017/07/26 Javascript
Angular实现svg和png图片下载实现
2019/05/05 Javascript
mustache.js实现首页元件动态渲染的示例代码
2020/12/28 Javascript
[52:09]2014 DOTA2华西杯精英邀请赛 5 25 NewBee VS DK第二场
2014/05/26 DOTA
[56:46]2018DOTA2亚洲邀请赛 3.31 小组赛 B组 VP vs Effect
2018/04/01 DOTA
[01:08:48]LGD vs OG 2018国际邀请赛淘汰赛BO3 第三场 8.25
2018/08/29 DOTA
Python中函数的参数传递与可变长参数介绍
2015/06/30 Python
Python的Django框架中的数据库配置指南
2015/07/17 Python
Python实现命令行通讯录实例教程
2016/08/18 Python
python获取文件路径、文件名、后缀名的实例
2018/04/23 Python
python多进程实现文件下载传输功能
2018/07/28 Python
Python装饰器用法实例分析
2019/01/14 Python
Python控制键盘鼠标pynput的详细用法
2019/01/28 Python
详解python中*号的用法
2019/10/21 Python
python中通过pip安装库文件时出现“EnvironmentError: [WinError 5] 拒绝访问”的问题及解决方案
2020/08/11 Python
Bose美国官网:购买Bose耳机和音箱
2019/03/10 全球购物
建筑学推荐信
2013/11/03 职场文书
高中生学习的自我评价
2013/12/14 职场文书
打架检讨书400字
2014/01/17 职场文书
出纳会计岗位职责
2014/03/12 职场文书
法院四风对照检查材料思想汇报
2014/10/06 职场文书
研究生简历自我评
2015/03/11 职场文书
职位证明模板
2015/06/23 职场文书
幼儿园中班教育随笔
2015/08/14 职场文书