南强小屋 Design By 杰米

本文实例讲述了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,计算年龄

南强小屋 Design By 杰米
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
南强小屋 Design By 杰米

评论“php计算年龄精准到年月日”

暂无php计算年龄精准到年月日的评论...

《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线

暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。

艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。

《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。