Вывод дат на витрине - падежи, форматы сайта, относительное время
Выводим даты так, чтобы месяц стоял в правильном падеже, формат совпадал с настройками сайта, а робот поисковика видел машинную дату.
Решение
Выводим дату по-русски:
echo FormatDate('j F Y', MakeTimeStamp($item['DATE_CREATE'])); // 6 августа 2026echo FormatDate('j F', $ts) . ' в ' . FormatDate('H:i', $ts);// собственный массив названий месяцев даст «6 Август»: падеж придётся склонять самомуРусский месяц выводят функцией платформы, а не своим массивом названий. Она знает про падежи, и «6 августа» получается само, без списка исключений в вашем коде.
Берём формат из настроек сайта:
$culture = \Bitrix\Main\Context::getCurrent()->getCulture();echo FormatDate($culture->getDateFormat(), $ts); // формат этого сайтаecho FormatDate($culture->getDateTimeFormat(), $ts); // с временем// жёсткий формат в коде ломается на втором сайте и на другом языкеФормат даты живёт в настройках сайта, а не в коде страницы. Второй сайт или смена языка меняют его без правки шаблонов - при условии, что шаблон не записал формат у себя.
Показываем свежие даты словами:
echo FormatDate([ 'today' => 'сегодня в H:i', 'yesterday'=> 'вчера в H:i', '' => 'j F Y', // всё остальное - обычным форматом], $ts);// ключи разбираются сверху вниз: первый подошедший и определяет выводСвежие даты понятнее словами, а не числом. «Сегодня в 14:20» читается быстрее, чем «06.08.2026 14:20», а для старых записей относительная подпись, наоборот, мешает.
Отдаём роботу машинный формат:
<time datetime="2026-08-06T14:20:00+03:00">6 августа в 14:20</time><!-- человеку - слова, роботу - атрибут в машинном виде -->Роботу нужен машинный формат рядом с человеческим. Разметка новости или отзыва с датой только словами читается людьми, но не попадает в выдачу как дата публикации.
Пустую дату обязательно проверяют до всякого вывода её на саму эту страницу. Незаполненное поле, прошедшее через преобразование времени, превращается в первое января семидесятого года и выглядит как ошибка данных.
Относительные подписи стоит ограничивать сегодняшним и вчерашним днём. «Три месяца назад» вместо даты заставляет человека считать, а не читать.
Дату публикации и дату правки на витрине лучше не путать. Первая интересна покупателю, вторая - только редактору, и показывать вторую как первую значит обманывать обоих.
Форматы дат стоит собрать в одном месте проекта, а не повторять в каждом шаблоне. Просьба «покажите ещё и время» тогда правится одной строкой, а не поиском по двум десяткам файлов витрины.
Типичные проблемы
На странице «6 Август 2026».
Название месяца берётся из своего массива, а не из функции платформы. Она склоняет месяц сама, без всякого списка исключений в вашем собственном коде.
На втором сайте формат даты чужой.
Формат записан прямо в шаблоне, а не взят из настроек сайта. Настройки сайта задают его сразу для всех страниц этого самого одного сайта.
У части записей дата - первое января тысяча девятьсот семидесятого.
Пустое значение прошло через преобразование времени как ноль. Пустую дату проверяют до всякого вывода.
Поисковик не видит даты публикации.
Дата выведена только словами, без машинного формата в атрибуте. Роботу нужен отдельный машинный вид этой же самой даты публикации этой страницы.
Подпись «сегодня» висит на вчерашней записи.
Страница отдаётся из кэша, собранного ещё вчерашним или даже позавчерашним рабочим днём. Относительные подписи и кэш страницы уживаются между собой довольно плохо.
Частые вопросы
Почему свой массив месяцев - плохая идея?
Он не знает падежей и ломается на первом же «1 марта». Функция платформы это уже умеет.
Где хранится формат даты сайта?
В настройках самого сайта, отдельно для даты и для даты со временем. Код берёт его оттуда.
Как быть с относительными подписями и кэшем?
Либо не кэшировать такой блок, либо ограничить подписи сегодняшним днём. Иначе «сегодня» доживает до завтра.
Нужен ли машинный формат везде?
Там, где дата важна поисковику: новости, отзывы, статьи. В служебных таблицах он не нужен.
Смежное
- Даты и время - оглавление подтемы
- Дата сохранилась не та: разбор причин - когда виновата не вёрстка, а хранение
- Даты в коде: объект, часовой пояс, фильтр по периоду - что происходит до вывода
- Дата, число и HTML в свойствах: хранение, вывод, фильтр - даты в свойствах инфоблоков
- Код для двух сайтов: текущий сайт, настройки, общие данные - почему формат берут из настроек
- Ядро D7 - устройство ядра целиком
- Дата и время изнутри: хранение, пояса, форматы - что происходит с датой до вывода