Код: показать возраст по полю “День Рождения”

Почти по всех социальных сетях есть такое обыденное для нас поле, как “День (Дата) рождения”. Некоторые его заполняют, некоторые – нет. Но очень редко, где данные этого поля используются. Так вот можно сделать хотя бы вывод возраста человека в виде – “Возраст: 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 файл.

Извините, этот файл сильно устарел и больше нет возможности его скачать.

В коде я постарался учесть ситуации, если вы не захотите выводить дни, или месяцы, или годы – чтобы все работало, как конструктор.

комментариев 5

  1. XA3AP:

    Не могли бы Вы поподробней описать, как сделать вывод возраста, у меня выводит “0 лет”. Я думаю не правильно к базе данных подключается. Версия BuddyPress 1.5

    • Что вы вписываете в $dob_field_name в функции? По идее, надо 'День дождения'.
      У вас опечатка на сайте :) Потому могут быть проблемы – в базе поле хранится с “дождения”, а в функции вы пишите “рождения”.

  2. XA3AP:

    Точно, недавно начал разбирать. Теперь немного понял суть работы. Спасибо большое.

  3. Елена:

    Спасибо большое!

  4. Владислав:

    Приветствую, в моем случае на тестовом сайте в файле function.php прописал ваш код – никаких изменений не произошло. Почему?

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *