Спасибо за вариант. Забрал в заметки.sajanagr писал(а): 30 июл 2025, 12:45 Вот исправленный вариант для поля с возрастом:Код: Выделить всё
// Получаем Unix timestamp даты рождения из поля [1483] $birthday_timestamp = [1483]; // Если дата рождения не указана, возвращаем пустую строку if (empty($birthday_timestamp)) { $output_value = ''; } else { // Создаём объект даты рождения $birthday = new DateTime(); $birthday->setTimestamp($birthday_timestamp); // Создаём объект текущей даты и явно устанавливаем время в полночь (чтобы совпадало с MySQL) $today = new DateTime(); $today->setTime(0, 0, 0); // Вычисляем разницу между датами $diff = $today->diff($birthday); // Получаем количество полных лет, месяцев и дней $years = $diff->y; $months = $diff->m; $days = $diff->d; // Формируем строку с правильным склонением для лет, месяцев и дней $years_text = $years . ' ' . getNounPluralForm($years, 'год', 'года', 'лет'); $months_text = $months . ' ' . getNounPluralForm($months, 'месяц', 'месяца', 'месяцев'); $days_text = $days . ' ' . getNounPluralForm($days, 'день', 'дня', 'дней'); // Итоговая строка $output_value = "$years_text $months_text $days_text"; } if (!function_exists('getNounPluralForm')) { /** * Склонение русских слов в зависимости от числа * @param int $number - число * @param string $one - форма для 1 (год/месяц/день) * @param string $two - форма для 2,3,4 (года/месяца/дня) * @param string $five - форма для 5 и больше, а также 11-19 (лет/месяцев/дней) * @return string */ function getNounPluralForm(int $number, string $one, string $two, string $five): string { $mod100 = $number % 100; if ($mod100 >= 11 && $mod100 <= 19) { return $five; } $mod10 = $number % 10; switch ($mod10) { case 1: return $one; case 2: case 3: case 4: return $two; default: return $five; } } }
Как расчитать возраст
Re: Как расчитать возраст
Re: Как расчитать возраст
так создайте глобальную функцию, и юзайте ее сколько угодно раз
***
Тружусь как пчелка
***
SQL,BpmOnline,Creatio,BpmSoft,.NET,SAP WMS,MS SQL Server,Windows Server,IIS
Тружусь как пчелка
***
SQL,BpmOnline,Creatio,BpmSoft,.NET,SAP WMS,MS SQL Server,Windows Server,IIS
- Fait
- Инвестор

- Сообщения: 1197
- Зарегистрирован: 19 ноя 2020, 17:46
- Имя: Максим Балакшеев
- Откуда: Россия, Златоуст
- Организация: ИП Балакшеев Максим Георгиевич
- Контактная информация:
Re: Как расчитать возраст
Позвольте вставить свои 5 копеек)
Вот точный рабочий вариант расчёта возраста (цифра, сколько лет) с учётом времени UNIX (работает в поле MySQL формула).
Преимущества: можно применять в фильтрах и отчётах и сортировать записи по этому полю.
Минусы - нет месяцев и дней (да и зачем они, если важен именно возраст)
777 - ваше поле с датой рождения
Вот точный рабочий вариант расчёта возраста (цифра, сколько лет) с учётом времени UNIX (работает в поле MySQL формула).
Преимущества: можно применять в фильтрах и отчётах и сортировать записи по этому полю.
Минусы - нет месяцев и дней (да и зачем они, если важен именно возраст)
777 - ваше поле с датой рождения
Код: Выделить всё
IF([777]=0,'',
IF([TODAY]>UNIX_TIMESTAMP(CONCAT(
YEAR(FROM_UNIXTIME([TODAY],'%Y-%m-%d')),'-',
MONTH(DATE_ADD(FROM_UNIXTIME(0), INTERVAL [777] SECOND)),'-',
DAY(DATE_ADD(FROM_UNIXTIME(0), INTERVAL [777] SECOND)))),
YEAR(DATE_ADD(FROM_UNIXTIME(0), INTERVAL [TODAY] SECOND))-
YEAR(DATE_ADD(FROM_UNIXTIME(0), INTERVAL [777] SECOND))+1,
YEAR(DATE_ADD(FROM_UNIXTIME(0), INTERVAL [TODAY] SECOND))-
YEAR(DATE_ADD(FROM_UNIXTIME(0), INTERVAL [777] SECOND))))