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 相关文章推荐
站长助手-网站web在线管理程序 v1.0 下载
May 12 PHP
PHP获取网址的顶级域名函数代码
Sep 24 PHP
PHP如何利用P3P实现跨域
Aug 24 PHP
PHP抓取、分析国内视频网站的视频信息工具类
Apr 02 PHP
ThinkPHP之import方法实例详解
Jun 20 PHP
php的dl函数用法实例
Nov 06 PHP
Laravel 5框架学习之向视图传送数据(进阶篇)
Apr 08 PHP
Zend Framework开发入门经典教程
Mar 23 PHP
php上传图片类及用法示例
May 11 PHP
PHP7新特性foreach 修改示例介绍
Aug 26 PHP
PHP反射API示例分享
Oct 08 PHP
原生JS实现Ajax通过GET方式与PHP进行交互操作示例
May 12 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
yii框架使用分页的方法分析
2019/07/25 PHP
js常用函数 不错
2006/09/08 Javascript
jquery左边浮动到一定位置时显示返回顶部按钮
2014/06/05 Javascript
jQuery+ajax实现鼠标单击修改内容的方法
2014/06/27 Javascript
js行号显示的文本框实现效果(兼容多种浏览器 )
2015/10/23 Javascript
JavaScritp添加url参数并将参数加入到url中及更改url参数的方法
2015/10/26 Javascript
JavaScript新增样式规则(推荐)
2016/07/19 Javascript
微信小程序技巧之show内容展示,上传文件编码问题
2017/01/23 Javascript
详解react如何在组件中获取路由参数
2017/06/15 Javascript
Angular短信模板校验代码
2020/09/23 Javascript
基于vuex实现购物车功能
2021/01/10 Vue.js
[02:56]《DAC最前线》之国外战队抵达上海备战亚洲邀请赛
2015/01/28 DOTA
[00:12]DAC SOLO赛卫冕冠军 VG.Paparazi灬展现SOLO技巧
2018/04/06 DOTA
PyCharm使用教程之搭建Python开发环境
2016/06/07 Python
基于python中的TCP及UDP(详解)
2017/11/06 Python
python实现word 2007文档转换为pdf文件
2018/03/15 Python
关于python列表增加元素的三种操作方法
2018/08/22 Python
对django xadmin自定义菜单的实例详解
2019/01/03 Python
详解django中url路由配置及渲染方式
2019/02/25 Python
解决Python计算矩阵乘向量,矩阵乘实数的一些小错误
2019/08/26 Python
python垃圾回收机制(GC)原理解析
2019/12/30 Python
python连接PostgreSQL过程解析
2020/02/09 Python
Python多线程:主线程等待所有子线程结束代码
2020/04/25 Python
解决TensorFlow调用Keras库函数存在的问题
2020/07/06 Python
mac安装python3后使用pip和pip3的区别说明
2020/09/01 Python
解决python3输入的坑——input()
2020/12/05 Python
HTML+CSS+JavaScript实现图片3D展览的示例代码
2020/10/12 HTML / CSS
肯尼迪就职演说稿
2013/12/31 职场文书
三八妇女节活动总结
2014/05/04 职场文书
青春演讲稿范文
2014/05/08 职场文书
钳工实训报告总结
2014/11/04 职场文书
唐山大地震观后感
2015/06/05 职场文书
解析laravel使用workerman用户交互、服务器交互
2021/04/28 PHP
利用 SQL Server 过滤索引提高查询语句的性能分析
2021/07/15 SQL Server
详解如何使用Nginx解决跨域问题
2022/05/06 Servers
Java+swing实现抖音上的表白程序详解
2022/06/25 Java/Android