本文实例讲述了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程序设计有所帮助。
问题内容: 考虑到他们的DOB格式为dd / mm / yyyy,我正在寻找一种计算人的年龄的方法。 我一直在使用以下功能,该功能在几个月内都可以正常工作,直到某种故障导致while循环永远不会结束并且使整个站点陷入瘫痪。由于每天有近100,000个DOB多次通过此功能,因此很难确定造成此问题的原因。 有人有更可靠的年龄计算方法吗? 编辑:此函数的某些时间似乎可以正常工作,但对于14年9月14日的
这是我的代码,从这里采取:计算年龄在JavaScript 它如何继续与月和日,如: 用户生日是:2010/04/29 结果应该是这样的:2岁4个月5天。 演示:http://jsfiddle.net/jFxb5/
我是JS的初学者。我可以用下面的代码计算年龄。这段代码多年来一直运行良好。如果我把日期放在任何一个月的12(例如,1950年12月14日)之后,那么它显示的是年份。现在我想展示每个人生日的年、月、日。有人能帮我吗?提前谢谢。
问题内容: 如果我的出生日期以表格的形式存储在表格中,并且从当前日期中减去该日期,那么返回的日期格式是什么? 如何使用这种返回的格式来计算某人的年龄? 问题答案: 如果该值存储为DATETIME数据类型: 考虑leap年时不太精确:
问题内容: 我在sql中有一个用户表,他们每个都有生日。我想将他们的出生日期转换为他们的年龄(仅年),例如日期:年龄:14,并将更改为年龄: 在这里,我想显示用户的日期: 问题答案: 功能:, MySQL > = 5.0.0 功能:,
我正在开发一个程序,它采用开始日期和结束日期,并返回年、月和日的不同值。每个类别都有自己的代码部分,这是我一直在使用的代码,到目前为止,它一直是半精确的,直到几天(有时是几个月。我甚至不想在这一点上愚弄闰年) Ex Start:04/10/2000 End:04/10/2006应该给我6年零个月零天。 年份代码: 月份代码: 天数代码:我已经尝试了多个版本,但没有太大的成功,例如,我可以计算天数之