[PHP代码] 计算年龄 精确到天

用于计算年龄 精确到天
  1. <?php
  2. /*www.kmhxyyfk.com
  3. * To change this license header, choose License Headers in Project Properties.
  4. * To change this template file, choose Tools | Templates
  5. * and open the template in the editor.
  6. */
  7. www.kmhxyyfk.com
  8. class Age {
  9. /**
  10. * 计算年龄精准到年月日
  11. * @param type $birthday
  12. * @return arraywww.kmhxyyfk.com
  13. */
  14. public function calAge($birthday) {
  15. list($byear, $bmonth, $bday) = explode('-', $birthday);
  16. list($year,www.kmhxyyfk.com $month, $day) = explode('-', date('Y-m-d'));
  17. $bmonth = intval($bmonth);
  18. $bday = intval($bday);
  19. if ($bmonth < 10) {
  20. $bmonth = '0' . $bmonth;www.kmhxyyfk.com
  21. }
  22. if ($bday < 10) {
  23. $bday = '0' . $bday;
  24. }
  25. $bi = intval($byear . $bmonth . $bday);
  26. $ni = intval($year . $month . $day);
  27. $not_birth = 0;
  28. if ($bi > $ni) {
  29. $not_birth = 1;
  30. $tmp = array($byear, $bmonth, $bday);
  31. list($byear, $bmonth, $bday) = array($year, $month, $day);
  32. list($year, $month, $day) = $tmp;
  33. list($bi, $ni) = array($nwww.kmhxyyfk.comwww.kmhxyyfk.comi, $bi);
  34. }
  35. $years = 0;
  36. while (($bi + 10000) <= $ni) {//先取岁数
  37. $bi += 10000;
  38. $years++;
  39. $byear++;
  40. }//得到岁数后 抛弃年
  41. list($m, $d) = $this->getMD(array($year, $month, $day), array($byear, $bmonth, $bday));
  42. return array('year' => $years, 'month' => $m, 'day' => $d, 'not_birth' => $not_birth);
  43. }
  44. /**
  45. * 只能用于一年内计算
  46. * @param type $ymdwww.kmhxyyfk.com
  47. * @param type $bymd
  48. */
  49. public function getMD($ymd, $bymd) {
  50. list($y, $m, $d) = $ymd;
  51. list($by, $bm, $bd) = $bymd;
  52. if (($m . $d) < ($bm . $bd)) {
  53. $m +=12;
  54. }
  55. $month = 0;
  56. while ((($bm . $bd) + 100) <= ($m . $d)) {
  57. $bm++;
  58. $month++;
  59. }
  60. if ($bd <= $d) {//同处一个月
  61. $day = $d - $bd;www.kmhxyyfk.com
  62. } else {//少一个月
  63. $mdays = $bm > 12 ? $this->_getMothDay( ++$by, $bm - 12) : $this->_getMothDay($by, $bm);
  64. $day = $mdays - $bd + $d;
  65. }
  66. return array($month, $day);
  67. }
  68. www.kmhxyyfk.com
  69. private function _getMothDay($year, $month) {
  70. switch ($month) {
  71. case 1:
  72. case 3:
  73. case 5:
  74. case 7:
  75. case 8:
  76. case 10:
  77. case 12:
  78. $day = 31;
  79. break;
  80. case 2:www.kmhxyyfk.com
  81. $day = (intval($year % 4) ? 28 : 29); //能被4除尽的为29天其他28天
  82. break;
  83. default:
  84. $day = 30;
  85. break;
  86. }
  87. return $day;
  88. }
  89. }
  90. www.kmhxyyfk.com
  91. $cage = new Age();
  92. $test = array(
  93. '1990-06-12',
  94. '1990-07-13',
  95. '1990-08-16',
  96. '1990-10-10',
  97. '1990-10-13',
  98. '1990-10-15',
  99. '1990-11-9',www.kmhxyyfk.com
  100. '1990-11-22',
  101. '2016-11-22',
  102. '2016-8-22',
  103. '2016-10-13',
  104. );
  105. echo date('Y-m-d');
  106. echo '<pre>';
  107. foreach($test as $v){
  108. $tmp = $cage->calAgwww.kmhxyyfk.come($v);
  109. echo $v , ':', $tmp['year'], '年', $tmp['month'],
  110. '月', $tmp['day'], '天', ';', $tmp['not_birth'], '<br>';
  111. }
  112. echo '</pre>' ;www.kmhxyyfk.com

  113. /*
  114. 运行结果:
  115. 2015-10-13
  116. 1990-06-12:25年4月1天;0
  117. 1990-07-13:25年3月0天;0
  118. 1990-08-16:25年1月27天;0
  119. 1990-10-10:25年0月3天;0
  120. 1990-10-13:25年0月0天;0
  121. 1990-10-15:24年11月28天;0
  122. 1990-11-9:24年11月4天;0
  123. 1990-11-22:24年10月21天;0
  124. 2016-11-22:1年1月9天;1
  125. 2016-8-22:0年10月9天;1
  126. 2016-10-13:1年0月0天;1
  127. *
  128. */
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值