Работа с датами и часовыми поясами в FreeMarker

В этой статье вы узнаете о расширениях FreeMarker, которые позволяют работать с датами и часовыми поясами.

В некоторых случаях нужно отображать даты в определенном формате. Например, при включении дат в шаблоны электронных писем, отображении дат на веб-страницах и так далее. FreeMarker предоставляет встроенные функциональные возможности для форматирования дат. Для использования этих функций достаточно добавить "?" перед самой функцией.

Давайте рассмотрим несколько примеров, иллюстрирующих применение встроенных функций для дат в рамках проекта, созданного с использованием шаблона “Web Blog”.

Сначала установим часовой пояс в CMS Engine. В боковой панели перейдите по пути Инструменты сайта > Конфигурация > Конфигурация ядра проекта, а затем добавьте следующее в конфигурацию:

<?xml version="1.0" encoding="UTF-8"?>
<site>
    <timeZone>America/Los_Angeles</timeZone>
</site>

Copy-icon

Теперь мы можем использовать часовой пояс, установленный в файле конфигурации проекта 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>

Copy-icon

Что отобразит следующее:

Top Books For Young Women
by Jane Doe
Dec 28, 2020

Copy-icon

Чтобы отобразить и дату и время:

<h3>${contentModel.date_dt?datetime}</h3}

Copy-icon

Что выведет на экран следующее:

2020-12-28T05:00:00.000Z

Copy-icon

Чтобы отобразить время и дату с некоторым форматированием:

<h3>${contentModel.date_dt?datetime?string["EEEE, MMMM dd, yyyy, hh:mm a '('zzz')'"]}</h3>

Copy-icon

Что выведет на экран следующее:

Wednesday, December 28, 2020, 05:00 AM (UTC)
Copy-icon

Как вы можете видеть из последних двух примеров, дата и время создания статьи указаны в UTC. Если мы хотим отобразить дату создания статьи в часовом поясе, указанном в файле конфигурации “Конфигурация ядра проекта”, выполните следующее:

<h3>${contentModel.date_dt?datetime?iso(siteConfig.getString("timeZone"))}</h3>

Copy-icon

Это отобразит следующее:

2020-12-27T21:00:00-08:00

Copy-icon

Использование настроек time_zone и date_time

Чтобы настроить часовой пояс, используемый шаблоном для отображения дат, можно воспользоваться настройкой FreeMarker под названием time_zone. Как только эта настройка будет сконфигурирована, все отображения дат будут соответствовать указанному часовому поясу. Для примера давайте настроим файл конфигурации “Конфигурация ядра проекта”, чтобы убедиться, что все отображения дат и времени соответствуют выбранному часовому поясу.

<#setting time_zone = siteConfig.getString("timeZone")>
<h3>${contentModel.date_dt?datetime}</h3>

Copy-icon

Что отобразит следующее:

2020-12-27T21:00:00.000-08

Copy-icon

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

<#setting datetime_format = "EEEE, MMMM dd, yyyy, hh:mm a '('zzz')'">

Copy-icon

Что отобразит то же самое время, что было использовано в примере выше, но в другом формате:

Tuesday, December 27, 2020, 09:00 PM (PST)

Copy-icon

Дополнительные сведения о встроенных функциях FreeMarker для отображения дат смотрите здесь.

Дополнительные сведения о настройке директивы FreeMarker смотрите здесь.

Связанные статьи

Документация для разработчиков