Форматирование даты и времени в MODX Revolution на русском

MODX написана на языке программирования PHP, поэтому для вывода дат используются функции PHP strtotime и strftime. В основном взаимодействие с датами ограничивается следующими стандартными полями ресурса (createdon, publishedon, editedon и т.д.)

Навигация по статье:


Поля ресурсов с выводом даты

В основном взаимодействие с датами ограничивается следующими стандартными полями ресурса:

  • createdon - дата создания;
  • publishedon - дата публикации;
  • editedon - дата редактирования;
  • unpub_date - дата отмены публикации;
  • deletedon - дата удаления.

Помимо стандартных полей можно создать TV-поле с типом ввода дата.

Примеры вывода даты

Пример Вывод
[[*createdon:strtotime:date=`%a %b %e, %Y`]] Fri Jan. 01, 2016
[[*createdon:strtotime:date=`%e %B %Y`]] 01 January 2016
[[*createdon:strtotime:date=`%A, %B %e, %Y`]] Friday, January 01, 2016
[[*createdon:strtotime:date=`%d.%m.%Y`]] 01.01.2016

Вывод даты сниппетами

Некоторые сниппеты по-разному обрабатывают дату, к примеру, в шаблонах (плейсхолдерах) pdoResources функция strtotime не нужна, т. е. вывод будет таким:

[[+createdon:date=`%d.%m.%Y`]]

В getResources же - нужна, вызов для getResources будет уже таким:

[[+createdon:strtotime:date=`%d.%m.%Y`]]

Русский язык и мультиязычность

В случаях, когда требуется выводить русские названия месяцев или дней недели, нужно в "Системных настройках" у ключа под названием locale задать ru_RU.UTF8, соответственно, для нужных языковых контекстов задаем свой, например, для английской версии сайта задаем en_US.UTF8.

Однако полный месяц даты на русском будет выводиться в именительном падеже, например, "01 Январь 2018", для того, чтобы перевести месяц в родительный падеж "01 Января 2016" можно использовать сниппет: [[+publishedon:dateRU]]

Сам код сниппета dateRU:

<?php
$month_arr = array(
    '01' => 'Января',
    '02' => 'Февраля',
    '03' => 'Марта',
    '04' => 'Апреля',
    '05' => 'Мая',
    '06' => 'Июня',
    '07' => 'Июля',
    '08' => 'Августа',
    '09' => 'Сентября',
    '10' => 'Октября',
    '11' => 'Ноября',
    '12' => 'Декабря'
);

$d = $input;
$month = strftime("%m",$d);
$year = strftime("%Y",$d);
$day = strftime("%d",$d);
$month = $month_arr[$month];

return "$day $month $year";
?>

Если же после форматирования вместо русского формата даты выводится английская, то создайте сниппет setLocale и вставьте код:

<?php
setlocale(LC_ALL, "ru_RU.UTF-8");
?>

После вставьте этот сниппет в начало шаблона, где нужно выводить форматирование даты. Если русская дата отображается вопросиками, проверьте кодировку сайта, должна быть такой же как и в базе (желательно использовать UTF-8).

Все возможные параметры для вывода даты

Код Описание Вывод
%a Короткое наименование дня недели Sun
%A Полное наименование дня недели Sunday
%b Короткое наименование месяца Jan
%B Полное наименование месяца January
%c Локальная дата и время сервера Wed Jan 7 00:22:10 2010
%C Век 20
%d День месяца (от 01 до 31) 04
%D Аналогично %m/%d/%y 04/29/10
%e День месяца (от 1 до 31) 3
%H Часы (24-часовые) 00–23
%I (заглавная i) Часы (12-часовые) 01–12
%l (нижний регистр L) Часы (12-часовые) 1–12
%j Номер дня года от 001 до 366
%m Месяц от 01 до 12
%M Минута от 00 до 59
%S Секунды от 00 до 59
%u День недели (Понедельник = 1) от 1 до 7
%w День недели (Воскресенье = 0) от 0 до 6
%x Аналогично %m/%d/%y 01/25/09
%X Аналогично %I:%M:%S 02:58:12
%y Последние две цифры года 09
%Y Год, четырехзначно 2010
%Z или %z Смещение часового пояса или наименование -005 или EST
%% Литерал % %



Комментарии к посту