Возраст по дате рождения в PHP
Многие php-шники сталкивались с вопросом как вычислить сколько лет человеку по дате рождения.
Наступил момент когда пришлось написать код самому и запостить, так как общарив инет и видя кучу предложенных вариантов которые не работают хочеться проявить инициативу и если где то вылезит ошибка не судите строго :)
предлогаю вам следующий PHP код на рассмотрение:
/*############################ # danro82[at]mail.ru # icq:137-213-137 # skype:halabudenco # yahoo:halabudenco # donate: # webmoney:R470659605468 ##############################*/ /* принимает формат даты $date_birth = '1979-10-12'; $date_now = date('Y-m-d'); $age = new age(); echo $age->getAgeWithW(date('1983-17-03')); */ $age = new age(); class age { function age(){} // конструктор не обязателен function getAgeWithW($date_birth){ //$date_birth - дата дня рождения //date('Y-m-d') - сегодняшняя дата $year=$this->get_age($date_birth, date('Y-m-d')); // вызываем функцию get_age $year= $year['years']."";// переводим в строку /* определяем года или год или лет */ if(strlen($year)==3){ if($year[2]==1){$age=" год";} if($year[2]>1 && $year[2]<5){$age=" года";} if($year[2]>=5 || $year[2]==0){$age=" лет";} }elseif(strlen($year)==2){ if($year[1]==1 && strlen($year)<2){$age=" год";} if($year[1]>1 && $year[1]<5){$age=" года";} if($year[1]>=5 || $year[1]==0){$age=" лет";} if($year>5 && $year<21){$age=" лет";} }else{ if($year[0]==1){$age=" год";} if($year[0]>1 && $year[0]<5){$age=" года";} if($year[0]>=5 || $year[0]==0){$age=" лет";} } return $year.$age; } function get_age($start_date, $end_date) { // парсим переменные через list list($start_year,$start_month,$start_date) = split('-', $start_date); list($current_year,$current_month,$current_date) = split('-', $end_date); $result = ''; /** дни для каждого месяца **/ for($x=1 ; $x<=12 ; $x++){ $dim[$x] = date('t',mktime(0,0,0,$x,1,date('Y'))); } /** вычесляем разницу между датами годом, месяцем, днём **/ $m = $current_month - $start_month; $d = $current_date - $start_date; $y = $current_year - $start_year; /** если сегодняшняя дата дня меньше даты дня рождения **/ if($d < 0) { $today_day = $current_date + $dim[$current_month]; $today_month = $current_month - 1; $d = $today_day - $start_date; $m = $today_month - $start_month; if(($today_month - $start_month) < 0) { $today_month += 12; $today_year = $current_year - 1; $m = $today_month - $start_month; $y = $today_year - $start_year; } } /** если сегодняшняя дата месяца меньше даты месяца рождения **/ if($m < 0) { $today_month = $current_month + 12; $today_year = $current_year - 1; $m = $today_month - $start_month; $y = $today_year - $start_year; } /* записываем данные в массив */ $r['years']=$y; // год рождения $r['month']=$m; // месяц рождения $r['days']=$d; // день рождения return $r; } }
Если данные храняться в базе mysql большую чать кода можно обойти, но это в следующей статье.
:Владимир
источник: dosug.md - Для правообладателей