Возраст по дате рождения в 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 - Для правообладателей



