Работа с датами и часовыми поясами в FreeMarker
В некоторых случаях нужно отображать даты в определенном формате. Например, при включении дат в шаблоны электронных писем, отображении дат на веб-страницах и так далее. FreeMarker предоставляет встроенные функциональные возможности для форматирования дат. Для использования этих функций достаточно добавить "?" перед самой функцией.
Давайте рассмотрим несколько примеров, иллюстрирующих применение встроенных функций для дат в рамках проекта, созданного с использованием шаблона “Web Blog”.
Сначала установим часовой пояс в CMS Engine. В боковой панели перейдите по пути Инструменты сайта > Конфигурация > Конфигурация ядра проекта, а затем добавьте следующее в конфигурацию:
<?xml version="1.0" encoding="UTF-8"?>
<site>
<timeZone>America/Los_Angeles</timeZone>
</site>
Теперь мы можем использовать часовой пояс, установленный в файле конфигурации проекта Engine. Чтобы получить доступ к часовому поясу из конфигурации, мы используем переменную FreeMarker siteTools
, предоставляемую CMS Engine для шаблонов. Получить дополнительную информацию о доступных в шаблоне переменных можно здесь.
Теперь мы модифицируем файл шаблона article.ftl
, чтобы отображать дату и время создания статьи.
Использование встроенных функций для дат
Чтобы отобразить только дату, без указания времени, когда была создана статья, мы можем получить доступ к переменной contentModel date_dt
и добавить в шаблон под именем автора:
<h1>${contentModel.subject!""}</h1>
<h2>by ${contentModel.author!""}</h2>
<h3>${contentModel.date_dt?date}</h3>
Что отобразит следующее:
Top Books For Young Women
by Jane Doe
Dec 28, 2020
Чтобы отобразить и дату и время:
<h3>${contentModel.date_dt?datetime}</h3}
Что выведет на экран следующее:
2020-12-28T05:00:00.000Z
Чтобы отобразить время и дату с некоторым форматированием:
<h3>${contentModel.date_dt?datetime?string["EEEE, MMMM dd, yyyy, hh:mm a '('zzz')'"]}</h3>
Что выведет на экран следующее:
Wednesday, December 28, 2020, 05:00 AM (UTC)
Как вы можете видеть из последних двух примеров, дата и время создания статьи указаны в UTC. Если мы хотим отобразить дату создания статьи в часовом поясе, указанном в файле конфигурации “Конфигурация ядра проекта”, выполните следующее:
<h3>${contentModel.date_dt?datetime?iso(siteConfig.getString("timeZone"))}</h3>
Это отобразит следующее:
2020-12-27T21:00:00-08:00
Использование настроек time_zone и date_time
Чтобы настроить часовой пояс, используемый шаблоном для отображения дат, можно воспользоваться настройкой FreeMarker под названием time_zone
. Как только эта настройка будет сконфигурирована, все отображения дат будут соответствовать указанному часовому поясу. Для примера давайте настроим файл конфигурации “Конфигурация ядра проекта”, чтобы убедиться, что все отображения дат и времени соответствуют выбранному часовому поясу.
<#setting time_zone = siteConfig.getString("timeZone")>
<h3>${contentModel.date_dt?datetime}</h3>
Что отобразит следующее:
2020-12-27T21:00:00.000-08
Чтобы все отображения дат и времени соответствовали определенному формату, можно воспользоваться настройкой datetime_format:
<#setting datetime_format = "EEEE, MMMM dd, yyyy, hh:mm a '('zzz')'">
Что отобразит то же самое время, что было использовано в примере выше, но в другом формате:
Tuesday, December 27, 2020, 09:00 PM (PST)