Форматирование дат

Многие не знают, что в MODX Revolution можно очень просто форматировать даты и выводить их на русском языке.

Выводим день, месяц прописью и год.

[[+publishedon:strtotime:date=`%d %b %Y`]]
//30 Apr 2012

Для появления русского языка в начале шаблона нужно вызвать сниппет setLocale:

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

Есть еще вариант указать эту же локаль в системных параметрах, но бывают рэндомные искажения дат в админке потом. Лично у меня - нормально работает.

Проверяем:

[[+publishedon:strtotime:date=`%d %b %Yг.`]]
//30 Aпр 2012г.

Кстати, все функции использующие локали начнут понимать по-русски. Если вам нужно установить локаль только для функций времени, то используйте не LC_ALL, а LC_TIME. Подробнее о локалях.

Установка локали может не работать на криво настроенных хостингах, где просто отсутствует русская локаль - тогда месяц так и будет выводиться на английском. Все равно у вас остается возможность сделать вот так:

[[+publishedon:strtotime:date=`%d.%m.%Yг.`]]
//30.04.2012г.

Почитать про функцию форматирования даты strftime можно тут.

Если очень нужно вывести месяц на русском, но хостинг - вредина, то используйте вот этот сниппет dateRU.

<?php
$month_arr = array('01' => 'Янв',
                   '02' => 'Фев',
                   '03' => 'Мар',
                   '04' => 'Апр',
                   '05' => 'Мая',
                   '06' => 'Июн',
                   '07' => 'Июл',
                   '08' => 'Авг',
                   '09' => 'Сен',
                   '10' => 'Окт',
                   '11' => 'Ноя',
                   '12' => 'Дек'
                  );
  
$time = strtotime($input);
$month = strftime('%m', $time);
$day = strftime('%d', $time);
$year = strftime('%Y', $time);
    
return "$day $month_arr[$month] $year";

Вызывать вот так:

[[+publishedon:dateRU]]г.
//30 Апр 2012г.
Следующая заметка →
Простейшая настройка мультиязычности
Комментарии (17)
98b503e504239ead5cc360331СикретНаме
28.02.2013 08:01

Нашёл вот такое решение: 1. В файле index.php в корне modx(!) пишем: setlocale(LC_TIME, "ru_RU.UTF8"); 2. В настройках системы, в словарь и язык находим "locale" и пишем: ru_RU.UTF8 Профит.

П.С. Полагаю, если это объединить с описанным Василием, то всегда, везде и во всех позах LANG у дат будет RU. А вот не будет ли избыточности, вопрос отдельный, хотя и не критичный, думаю.

Bond Nataly
03.03.2013 00:12

а не подскажете, как на хостинге(VPS) настроить локаль?

Виталий СоломинВиталий Соломин
05.03.2013 15:46

У меня после установки свойства locale в LC_TIME,"ru_RU.UTF-8" выводится следующее

04 ���� 2013

98b503e504239ead5cc360331СикретНаме
23.06.2013 11:57

Во, блин, сюжет... В трёх местах нормально всё, в четвёртом 01 Янв 1970 выводит - ГЫ?! :0) Как лечить и откуда ноги растут?

KyokataАндрей Кузьминых
17.07.2013 18:49

А без фильтра ту же дату как выводит? Такое ощущение, что она просто пустая, возможно с кэшированием глюки.

Сергей
17.09.2013 03:48

[[+publishedon]] замени на [[*publishedon]]

Чикин Артур
15.12.2013 00:23

А в админке разве нельзя установить ЛОКАЛЬ? Пункт локаль.

bezumkinВасилий Наумкин
15.12.2013 01:10

А заметку прочитать?

Есть еще вариант указать эту же локаль в системных параметрах, но бывают рэндомные искажения дат в админке потом. Лично у меня — нормально работает.

Антон Матвеев
23.01.2014 20:36

делал при помощи pdoResources вывод новостей и столкнулся с таким...

на той странице где несколько превью новостей ---

[[!pdoResources? &tpl=`news-tpl`]]

шаблон news-tpl:

<div class="article">
    <div class="date">[[+publishedon]]</div>
    <div class="intro">
        <h2><a href="[[~[[+id]]]]">[[+pagetitle]]</a></h2>
        <p>[[+introtext]]</p>
    </div>
</div>

Все выводится верно, кроме - publishedon. Тут появляются непонятные цифри или "0", а если применить форматирование даты то вообще пусто. Долго пытался понять, что же и почему оно не выводится... ведь раньше уже так делал

Установсил getResources заменил вызов и все стало как нужно

Видимо что то не так реализованно, или я что то не дописал ?

bezumkinВасилий Наумкин
23.01.2014 21:09
[[+publishedon:date=`%d.%m.%Yг.`]]
Антон Матвеев
23.01.2014 21:15

Спасибо, помогло. А почему фильтр :strtotime уже не нужно писать ? насчет этого ни где не встречал информации

bezumkinВасилий Наумкин
23.01.2014 21:23

Потому, что данные в БД и так хранятся в timestamp, а pdoTools работает именно с ней, без преобразований.

P.S. Старайся нажимать на ссылку "Ответить", если ты отвечаешь на комментарий.

Aleksey Yakovlev
17.02.2014 20:52

и все же что-то не так я делаю. перехожу с getresources на pdo. вместо даты из TV EventDate выдает "1 января 1970 года". в вызове TV включено: "... &includeTVs=pageImg, EventDate, EventPlace &sortby=EventDate ...". В шаблоне регулируется формат даты TV [[+tv.EventDate:date=%e %B %Y]]. Если форматирование в шаблоне убрать - выводит указанную в Tv правильную дату, но слишком подробно. В вызов добавлял и processTVs=1 и prepareTVs=1, но ничего не меняется. В крайнем случае можно наверное отформатировать вывод TV в настройках самого TV, но хотелось бы оставить себе пространство для маневра и брать его по умолчанию. Где ошибка?

bezumkinВасилий Наумкин
17.02.2014 20:58

Ошибка в том, что для ТВ параметров обычно как раз нужен strtotime, а processTVs должно быть отключено, иначе ТВ отформатируется согласно своих настроек.

Если в БД "245689123647" - то strtotime не нужно использовать. В таком виде хранятся даты у ресурсов сайта. Если в БД "2014-10-12 12:15" - то strtotime нужен, чтобы привести дату к секундам и её можно было отформатировать.

[[+publishedon:date=`%e %B %Y`]]
[[+tv.date:strtotime:date=`%e %B %Y`]]

Понятно?

Aleksey Yakovlev
17.02.2014 21:06

супер, спасибо!

bonza57@gmail.combonzaznob
08.06.2014 00:24

Может кому то пригодится. Для мультиязычности (babel) можно использовать конструкцию: (не забываем в настройки контекста добавить поля locale - т.е. значения для русскоязычной версии к примеру 'ru_RU.UTF-8' для en 'en_US.UTF-8'); Сниппет setLocale: getOption('locale',null,'ru_RU.UTF-8'); setlocale(LC_ALL, $locale);

Алексей
08.06.2014 01:34

Интересно, как узнать, установлена ли у сервера русская локаль? к примеру вот тут: http://minishop2.com/manager/?a=81 на английском названия дат - у меня также. Хотелось бы по-русски но не могу никак докопаться в чем же все-таки дело.

born2slip
pishnaa istntome
22.11.2022 14:06
огромное спасибо! )
inetlover
Александр Наумов
14.11.2022 10:19
посмотри документацию. Спасибо, что-то она мне не нагуглилась. Это просто функции объединения для о...
bezumkin
Василий Наумкин
10.11.2022 05:46
Спасибо за поздравления!
inetlover
Александр Наумов
09.11.2022 17:08
Посмотрел в ДевТулсе свойство overscroll-behavior: none; присутствует, проверил в Chrome и Chromium ...
bezumkin
Василий Наумкин
03.11.2022 20:57
Поискать в исходниках ссылки на её адрес и поменять - скорее всего только nuxt.config.js. А зачем эт...
ni.kolokol@mail.ru
Николай Каленников
03.11.2022 19:43
Спасибо. Попробую тоже с нуля переставить
inetlover
Александр Наумов
03.11.2022 19:24
Спасибо!!! Все заработало!
bezumkin
Василий Наумкин
28.10.2022 05:23
В тексте есть подсказка // Контроллер требует новое разрешение protected $scope = &#x27;ord...
bezumkin
Василий Наумкин
27.10.2022 13:25
Понял, спасибо!
inetlover
Александр Наумов
23.10.2022 13:33
Понял, спасибо!