Всем доброго времени суток. Прошу помощи у знающих. Я создал дополнительный столбец birthday в dle_users, в него добавляется дата рождения.
Функции для обработки вывода и заполнения поля:
<?php
if( ! defined( 'DATALIFEENGINE' ) ) {
die( "Hacking attempt!" );
}
function showSetBday ($birthday) {
$dt = explode('-', $birthday);
for($month = 1; $month <= 12; $month++) {
$monthName = langdate("F", mktime(0, 0, 0, $month));
if($month == $dt[1]) $monthOptions .= "<option selected value=\"{$month}\">{$monthName}</option>\n";
else $monthOptions .= "<option value=\"{$month}\">{$monthName}</option>\n";
}
$monthOptions = "<select name=\"bday[1]\">".$monthOptions."</select>";
for($day=1; $day<=31; $day++) {
if($day == $dt[2]) $dayOptions .= "<option selected value=\"{$day}\">{$day}</option>\n";
else $dayOptions .= "<option value=\"{$day}\">{$day}</option>\n";
}
$dayOptions = "<select name=\"bday[2]\">".$dayOptions."</select>";
for($year=2012; $year>=1930; $year--) {
if($year == $dt[0]) $yearOptions .= "<option selected value=\"{$year}\">{$year}</option>\n";
else $yearOptions .= "<option value=\"{$year}\">{$year}</option>\n";
}
$yearOptions = "<select name=\"bday[0]\">".$yearOptions."</select>";
return $dayOptions." ".$monthOptions." ".$yearOptions;
}
function get_age($bDay, $format = " %y [год] %m [месяц] %d [день]"){
$dob = new DateTime($bDay);
$current_date_time = new DateTime();
$diff = $current_date_time->diff($dob);
$years = $diff->format("%y");
$months = $diff->format("%m");
$days = $diff->format("%d");
if(!empty($years) && $years > 0 && strpos($format,"%y") && strpos($format,"[год]")){
$last = substr($years,-1);
if($last == 1) $format = str_replace('[год]','год',$format);
elseif($last > 4 || $last == 0) $format = str_replace('[год]','лет',$format);
else $format = str_replace('[год]','года',$format);
}
if(!empty($months) && $months > 0 && strpos($format,"%m") && strpos($format,"[месяц]")){
$last = substr($months,-1);
if($last == 1) $format = str_replace('[месяц]','месяц',$format);
elseif($last > 4 || $last == 0) $format = str_replace('[месяц]','месяцев',$format);
else $format = str_replace('[месяц]','месяца',$format);
}
if(!empty($days) && $days > 0 && strpos($format,"%d") && strpos($format,"[день]")){
$last = substr($days,-1);
if($last == 1) $format = str_replace('[день]','день',$format);
elseif($last > 4 || $last == 0) $format = str_replace('[день]','дней',$format);
else $format = str_replace('[день]','дня',$format);
}
return $diff->format($format);
}
?>
Подключаю в engine/modules/profile.php пред:
$parse = new ParseFilter( );
Добавляю:
include_once(ENGINE_DIR."/modules/birthday.php");
Далее для вывода в шаблоне добавляю переменные перед
if( $row['land'] ) {
:
if ($row['birthday'] != "0000-00-00") $bday = langdate("j F Y", strtotime($row['birthday']));
else $bday = $lang['not_bday'];
$tpl->set( '{birthday}', $bday );
$tpl->set( '[birthday]', "" );
$tpl->set( '[/birthday]', "" );
$tpl->set( '{editbday}', showSetBday($row['birthday']) );
Я хочу добавит еще одну переменную которая будет выводить возраст, нашел функцию, но вывести не получается.
Сама функция добавлена после переменных даты:
if ($row['birthday'] != "0000-00-00") $bday = langdate("j F Y", strtotime($row['birthday']));
else $bday = $lang['not_bday'];
$tpl->set( '{birthday}', $bday );
$tpl->set( '[birthday]', "" );
$tpl->set( '[/birthday]', "" );
$tpl->set( '{editbday}', showSetBday($row['birthday']) );
preg_match( "/([0-9]{1,2})\-([0-9]{1,2})-([0-9]{1,4})/", $row['birthday'], $match ); // находим наши цифры
$timeYear = langdate( "Y", time (), true ); // определим нынешний год
$dateD = $match[1]; // день
$dateM = $match[2]; // месяц
$dateY = $match[3]; // год
if( $dateD <= 31 AND $dateM <= 12 AND $dateY < $timeYear AND $dateY >= $timeYear-140 ) { // проверяем адекватность заполнения дня рождения
function getAge($y, $m, $d) {
if($m > date('m') || $m == date('m') && $d > date('d'))
return (date('Y') - $y - 1); // если ДР в этом году не было, то ещё -1
else
return (date('Y') - $y); // если ДР в этом году был, то отнимаем от этого года год рождения
}
$getAge = getAge($dateY, $dateM, $dateD); //получаем количество лет
function number($n, $titles) {
$cases = array(2, 0, 1, 1, 1, 2);
return $titles[($n % 100 > 4 && $n % 100 < 20) ? 2 : $cases[min($n % 10, 5)]];// правильно склоняем сколько нам лет или годиков :)
}
$getNumber = number($getAge, array('год', 'года', 'лет')); // правильно склоняем
echo $getAge." ".$getNumber;
}
$tpl->set( '{birthday-getage}', $getAge );
$tpl->set( '{birthday-getnumber}', $getNumber );
Собственно вот и вопрос, в чем ошибка, как вывести возраст? Всем спасибо за помощь.