Функция cot_build_age в Cotonti

Описание функции cot_build_age в Cotonti
Функция cot_build_age рассчитывает возраст пользователя, исходя из его даты рождения. Используется в настройках профиля пользователя и его подробной публичной страницы.

 

код функции

/**
 * Calculates age out of date of birth.
 *
 * @param int $birthdate Timestamp or a string according to format 'YYYY-MM-DD'
 * @return int Age in years or NULL on failure
 */
function cot_build_age($birthdate)
{
    if (is_string($birthdate))
    {
        $birthdate = strtotime($birthdate);
    }
    if (is_null($birthdate) || $birthdate === false || $birthdate === -1)
    {
        return null;
    }

    list($birth_y, $birth_m, $birth_d) = explode('-', cot_date('Y-m-d', $birthdate));
    list($now_y, $now_m, $now_d) = explode('-', cot_date('Y-m-d'));

    $age = $now_y - $birth_y - 1;

    if ($birth_m < $now_m || ($birth_m == $now_m && $birth_d <= $now_d))
    {
        $age += 1;
    }

    return ($age < 0) ? $age + 136 : $age;
}

 


Параметры:

$birthdate: Строка или метка времени (timestamp) с датой рождения в формате 'YYYY-MM-DD'.
Возвращаемое значение:
Функция возвращает возраст в годах или NULL в случае ошибки.


Логика работы:

Преобразование строки в метку времени:

if (is_string($birthdate)) {
    $birthdate = strtotime($birthdate);
}


Если переданный параметр $birthdate является строкой, то она преобразуется в метку времени с помощью функции strtotime. Это важно, так как дата рождения может быть передана как строка в формате 'YYYY-MM-DD', и strtotime преобразует её в метку времени для дальнейших операций.

Проверка на ошибки:


if (is_null($birthdate) || $birthdate === false || $birthdate === -1) {
    return null;
}

Проверяется, что дата рождения была корректно преобразована в метку времени. Если $birthdate равно null, false или -1, это означает, что преобразование не удалось, и функция возвращает null.

Разделение даты рождения и текущей даты:

list($birth_y, $birth_m, $birth_d) = explode('-', cot_date('Y-m-d', $birthdate));
list($now_y, $now_m, $now_d) = explode('-', cot_date('Y-m-d'));


 

Здесь мы используем функцию cot_date('Y-m-d', $birthdate) для получения строки в формате 'YYYY-MM-DD' из метки времени $birthdate. Далее строка разделяется на отдельные компоненты — год, месяц и день.

Аналогично для текущей даты используется cot_date('Y-m-d'), чтобы получить текущие год, месяц и день.

Расчет возраста:


$age = $now_y - $birth_y - 1;

Начальный расчет возраста основывается на разнице между текущим годом и годом рождения. Вычитаем 1, потому что ещё не прошел полный день рождения в этом году.

Проверка месяца и дня для корректировки возраста:

if ($birth_m < $now_m || ($birth_m == $now_m && $birth_d <= $now_d)) {
    $age += 1;
}


Здесь проверяется, прошел ли уже день рождения в текущем году. Если месяц рождения меньше текущего месяца, то день рождения уже прошел, и мы увеличиваем возраст на 1 год. Также добавляется условие, что если месяц рождения совпадает с текущим, но день рождения уже наступил или наступит, то возраст тоже увеличивается на 1.

Корректировка возраста:

return ($age < 0) ? $age + 136 : $age;

Это условие защищает от ошибок. Теоретически, если дата рождения передана с ошибкой (например, она в будущем), то возраст будет отрицательным, и функция корректирует его, добавив 136 лет. Это специфическая корректировка, вероятно, связанная с учетом возможных ошибок или специфических значений.

Пример использования:

в шаблоне

{USERS_DETAILS_AGE}

Получаем через функцию cot_generate_usertags массив, где

'AGE' => (is_null($user_data['user_birthdate'])) ? '' : cot_build_age($user_data['user_birthdate']),

 

Общий пример

echo cot_build_age('2000-01-01'); // Выведет возраст 25, если сегодня 2025 год.


Заключение:
Функция cot_build_age аккуратно обрабатывает дату рождения, правильно учитывает год, месяц и день, а также учитывает возможные ошибки в переданных данных.

 

3 минут чтения Administrator

Комментарии (0)

Комментарии отсутствуют
Добавление комментариев доступно только зарегистрированным пользователям

Автор контента

Administrator

Оффлайн

Administrator

Последняя авторизация: 05.07.2026 18:32

  • Страница размещена: 21.01.2025 21:56
  • Последнее обновление: 21.01.2025 21:59