• 技术文章 >php教程 >php手册

    php计算年龄精准到年月日,php计算年月日

    2016-06-13 08:50:44原创588

    php计算年龄精准到年月日,php计算年月日


    本文实例讲述了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 '
    ';
    foreach($test as $v){
      $tmp = $cage->calAge($v);
      echo $v , ':', $tmp['year'], '年', $tmp['month'],
     '月', $tmp['day'], '天', ';', $tmp['not_birth'], '
    '; } echo '
    ' ; /* 运行结果: 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程序设计有所帮助。

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:php 计算年龄 php
    上一篇:php调用COM组件,php调用组件 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • php利用新浪接口查询ip获取地理位置• 使用PHP 5.0 轻松解析XML文档(4)• PHP保存带BOM文件的方法,• smarty模板引擎从php中获取数据的方法,smarty模板• php 简单的缓存全站函数介绍
    1/1

    PHP中文网