45fan.com - 路饭网

搜索: 您的位置主页 > 电脑频道 > 编程代码 > 阅读资讯:在php中计算年龄精准到年月日的诀窍

在php中计算年龄精准到年月日的诀窍

2016-03-03 14:26:17 来源:www.45fan.com 【

在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 '<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程序设计有所帮助。


本文地址:http://www.45fan.com/bcdm/41086.html
Tags: PHP 计算 年龄
编辑:路饭网
推广内容
推荐阅读
热门推荐
推荐文章
关于我们 | 联系我们 | 友情链接 | 网站地图 | Sitemap | App | 返回顶部