Код: показать возраст по полю “День Рождения”
Почти по всех социальных сетях есть такое обыденное для нас поле, как “День (Дата) рождения”. Некоторые его заполняют, некоторые – нет. Но очень редко, где данные этого поля используются. Так вот можно сделать хотя бы вывод возраста человека в виде – “Возраст: 23 года” или “Возраст: 27 лет 4 месяца”. Сделать это не сложно и код представлен ниже.
Прошу учесть, что писался на скорую року, саму идею такой функции подглядел на англоязычном форуме BuddyPress. Саму функцию вставляете в functions.php темы или в bp-custom.php.
/* * Функция подсчета возраста */ function cd_get_age_from_dob($dob_field_name, $format = "%y [год], %m [месяц], %d [день]", $user_id = false){ if(!$user_id) $user_id = bp_displayed_user_id (); // получаем дату рождения из базы данных $dob_time = xprofile_get_field_data($dob_field_name, $user_id); // создаем объект даты на основе пользовательских данных $dob = new DateTime($dob_time); // текущая дата $current_date_time = new DateTime(); // считаем разницу - возвращает объект DateInterval $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); } /* * Использование в файлах темы */ // выведет: Возраст: 23 года, 0 месяцев, 26 дней echo 'Возраст: ' . cd_get_age_from_dob('Дата рождения'); // выведет: Возраст: 23 года echo 'Возраст: ' . cd_get_age_from_dob('Дата рождения', "%y [год]");
Вы также можете скачать простенький php файл.
Извините, этот файл сильно устарел и больше нет возможности его скачать.
В коде я постарался учесть ситуации, если вы не захотите выводить дни, или месяцы, или годы – чтобы все работало, как конструктор.
Не могли бы Вы поподробней описать, как сделать вывод возраста, у меня выводит “0 лет”. Я думаю не правильно к базе данных подключается. Версия BuddyPress 1.5
Что вы вписываете в $dob_field_name в функции? По идее, надо
'День дождения'
.У вас опечатка на сайте :) Потому могут быть проблемы – в базе поле хранится с “дождения”, а в функции вы пишите “рождения”.
Точно, недавно начал разбирать. Теперь немного понял суть работы. Спасибо большое.
Спасибо большое!
Приветствую, в моем случае на тестовом сайте в файле function.php прописал ваш код – никаких изменений не произошло. Почему?