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中使用Sockets 从Usenet中获取文件
Jan 10 PHP
通过PHP CLI实现简单的数据库实时监控调度
Jul 01 PHP
php的$_FILES的临时储存文件与回收机制实测过程
Jul 12 PHP
采用header定义为文件然后readfile下载(隐藏下载地址)
Jan 31 PHP
Yii调试SQL的常用方法
Jul 09 PHP
将PHP程序中返回的JSON格式数据用gzip压缩输出的方法
Mar 03 PHP
thinkPHP删除前弹出确认框的简单实现方法
May 16 PHP
php字符集转换
Jan 23 PHP
老生常谈PHP面向对象之标识映射
Jun 21 PHP
PHP实现mysqli批量执行多条语句的方法示例
Jul 22 PHP
PHP 文件上传限制问题
Sep 01 PHP
浅析PHP中json_encode与json_decode的区别
Jul 15 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
1.PHP简介
2006/10/09 PHP
php过滤危险html代码
2008/08/18 PHP
php隐藏IP地址后两位显示为星号的方法
2014/11/21 PHP
php实现比较两个字符串日期大小的方法
2015/05/12 PHP
Windows2003下php5.4安装配置教程(IIS)
2016/06/30 PHP
Yii2框架dropDownList下拉菜单用法实例分析
2016/07/18 PHP
Linux基于php-fpm模式的lamp搭建phpmyadmin的方法
2018/10/25 PHP
document.documentElement &amp;&amp; document.documentElement.scrollTop
2007/12/01 Javascript
jQuery判断元素是否存在的可靠方法
2014/05/06 Javascript
jQuery $.each遍历对象、数组用法实例
2015/04/16 Javascript
浅谈JavaScript中promise的使用
2017/01/11 Javascript
Angular组件化管理实现方法分析
2017/03/17 Javascript
JavaScript之class继承_动力节点Java学院整理
2017/07/03 Javascript
Vue AST源码解析第一篇
2017/07/19 Javascript
Vue动态获取width的方法
2018/08/22 Javascript
微信小程序购物车、父子组件传值及calc的注意事项总结
2018/11/14 Javascript
JavaScript强制类型转换和隐式类型转换操作示例
2019/05/01 Javascript
浅谈Vue 函数式组件的使用技巧
2020/06/16 Javascript
手写Vue源码之数据劫持示例详解
2021/01/04 Vue.js
[52:41]OG vs IG 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/20 DOTA
Python实现股市信息下载的方法
2015/06/15 Python
python3利用Dlib19.7实现人脸68个特征点标定
2018/02/26 Python
基于python log取对数详解
2018/06/08 Python
Pytorch中的VGG实现修改最后一层FC
2020/01/15 Python
python实现图片横向和纵向拼接
2020/03/05 Python
为什么是 Python -m
2020/06/19 Python
详解tensorflow之过拟合问题实战
2020/11/01 Python
FOREO官方网站:LUNA露娜洁面仪
2016/11/28 全球购物
高山背包:High Sierra
2017/11/23 全球购物
EJB的角色和三个对象
2015/12/31 面试题
Shell脚本如何向终端输出信息
2014/04/25 面试题
债务授权委托书范本
2014/10/17 职场文书
学校计划生育责任书
2015/05/09 职场文书
幼儿园奖惩制度范本
2015/08/05 职场文书
一文帮你理解PReact10.5.13源码
2021/04/03 Javascript
微前端qiankun改造日渐庞大的项目教程
2022/06/21 Javascript