Heim > Artikel > Backend-Entwicklung > PHP berechnet das Alter genau nach Jahr, Monat und Tag
Dieser Artikel stellt hauptsächlich die Methode zur genauen Berechnung des Alters in PHP vor. Es beinhaltet die damit verbundenen Fähigkeiten von PHP-Betriebsdaten und -zeichenfolgen. Es ist sehr einfach und praktisch 🎜>
In diesem Artikel werden die Beispiele erläutert. Die Methode zur Altersberechnung in PHP ist auf Jahr, Monat und Tag genau. Teilen Sie es als Referenz mit allen. Die Details lauten wie folgt: '<?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 class="brush:php;toolbar:false">'; foreach($test as $v){ $tmp = $cage->calAge($v); echo $v , ':', $tmp['year'], '年', $tmp['month'], '月', $tmp['day'], '天', ';', $tmp['not_birth'], '<br>'; } echo 'Ausgabe:
/* 运行结果: 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 * */