Функция 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 аккуратно обрабатывает дату рождения, правильно учитывает год, месяц и день, а также учитывает возможные ошибки в переданных данных.
Комментарии (0)
Автор контента
Оффлайн
Administrator
Последняя авторизация: 05.07.2026 18:32
- Страница размещена: 21.01.2025 21:56
- Последнее обновление: 21.01.2025 21:59