Сегодня, Вчера, 2 дня назад, с помощью FormatDate()

Рассмотрим популярный пример вывода даты в статьях или новостях в формате  "Сегодня", "Вчера", "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 дней назад
Имя *
Логин (мин. 3 символа)
E-mail *
*— обязательные для заполнения поля
Логин или e-mail
TUNING-SOFT.RU Разработка умных веб-сервисов