Рассмотрим популярный пример вывода даты в статьях или новостях в формате "Сегодня", "Вчера", "2 дня назад" и т.д.
Подходит для данной задачи штатная, многозадачная функция 1С Битрикс FormatDate()
FormatDate()
Всю информацию по данной функции смотрите в документации по
ссылке.
У лэнгов данной функции есть одна проблемка, вместо "Дней" она выводит "Сутки", т.е. вместо "Сегодня" или "2 дня назад" она выводит "0 суток назад", это можно исправить достаточно легко и в дальнейшем на всем сайте это будет работать.
Итак, выводим где-нибудь в статье или новости дату в данном формате dago
echo FormatDate("dago", MakeTimeStamp($arItem["ACTIVE_FROM"], CSite::GetDateFormat()));
Либо для эксперимента скопируйте готовый код, дату вручную поменять будет удобно.
echo FormatDate("dago", MakeTimeStamp('21.07.2018 10:21:06'));
По умолчанию выводится такой текст
5 суток назад
Чтобы заменить "сутки" на "дни" + "вчера" + "сегодня" воспользуемся давней
фишкой Битрикса.
В Битриксе есть возможность переопределять любые лэнги, хоть компонента, хоть шаблона компонента, хоть модуля, хоть чего, нужно только найти опытным путем, какой файл с языковыми фразами используется необходимой функцией.
Поиском в PhpStorm все находится в два клика, в нашем случае это
/bitrix/modules/main/lang/ru/tools.php
Зная путь до файла с лэнгами остается переопределить необходимые лэнги в нашем случае.
В инструкции по ссылке выше нужно сделать следующее:
1) Создаем вручную данный файл по указанному пути в кодировке вашего сайта
/bitrix/php_interface/user_lang/ru/lang.php
В данном файле lang.php
для конкретного языка системы, например ru
, должны храниться все ваши пользовательские лэнги, их будет использовать система, данный файл не обновляется и не затирается, он специально для этого и придуман, что бы разработчик мог изменять системные языковые фразы на свои без потери.
2) Осталось правильно переопределить языковые фразы, наш готовый пример
<?php
$MESS['/bitrix/modules/main/lang/ru/tools.php']['FD_DAY_AGO_0'] = 'Сегодня';
$MESS['/bitrix/modules/main/lang/ru/tools.php']['FD_DAY_AGO_1'] = 'Вчера';
$MESS['/bitrix/modules/main/lang/ru/tools.php']['FD_DAY_AGO_10_20'] = '#VALUE# дней назад';
$MESS['/bitrix/modules/main/lang/ru/tools.php']['FD_DAY_AGO_MOD_1'] = '#VALUE# день назад';
$MESS['/bitrix/modules/main/lang/ru/tools.php']['FD_DAY_AGO_MOD_2_4'] = '#VALUE# дня назад';
$MESS['/bitrix/modules/main/lang/ru/tools.php']['FD_DAY_AGO_MOD_OTHER'] = '#VALUE# дней назад';
?>
Тут все просто, вначале слева указываете необходимый путь до файла с языковыми фразами, это может быть путь до лэнга компонента, шаблона, модуля и т.д., потом указываете символьный код фразы, которую нужно заменить на свою и справа ее значение, текстовое описание, в некоторых фразах могут быть доступны всякие макросы.
В общем, тут самое сложное это найти тот файл лэнга, который используется в коде функцией, в PhpStorm это делается за пару секунд и кликов, зная его путь, можно переопределять все, что захочется.
Ну и все на этом, обновляйте страницу, где у вас выводится дата и вместо даты
5 суток назад
будет дата
5 дней назад