Вывод дат в шаблонах Cotonti (Форматы и примеры в тегах)

Данная статья систематизирует и расширяет существующую документацию управления отображением дат и времени в шаблонах, дополняя её практическими примерами, рекомендациями и пояснениями.

Вывод дат в шаблонах Cotonti

Настройка формата отображения: локально и глобально

В системе Cotonti все даты внутри базы данных хранятся в формате UNIX timestamp — это целое число секунд, прошедших с 1 января 1970 года 00:00:00 (UTC).

Такой формат удобен для:

  • хранения,
  • сравнения,
  • сортировки,
  • фильтрации,
  • расчётов,
  • работы с часовыми поясами.

Однако пользователю необходимо видеть дату в человеко-читаемом виде.
За преобразование timestamp → текст отвечает функция-обёртка cot_date().

Данная статья систематизирует и расширяет существующую документацию, дополняя её практическими примерами, рекомендациями и пояснениями.


1. Два способа управления форматом вывода

Формат отображения даты в Cotonti можно изменить:

  1. Локально — непосредственно в шаблоне (для конкретного места вывода).
  2. Глобально — через языковые файлы системы.

Рассмотрим оба варианта подробно.


2. Локальная настройка формата в шаблоне

2.1 Базовый принцип

Допустим, в шаблоне используется тег:

{PAGE_ROW_DATE_STAMP}

Он содержит UNIX-временную метку, например:

1704948992

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

{PAGE_ROW_DATE_STAMP|cot_date('d-m-Y', $this)}

Здесь:

  • 'd-m-Y' — формат вывода
  • $this — текущая метка времени
  • третий параметр (необязательный) — учитывать ли временную зону пользователя

2.2 Параметры функции cot_date()

Функция принимает:

cot_date($format, $timestamp, $usertimezone)

ПараметрОбязательныйНазначение
$formatДаФормат даты
$timestampДаUNIX timestamp
$usertimezoneНетУчитывать ли часовой пояс пользователя

По умолчанию третий параметр равен true.

Пример без учёта временной зоны:

{PAGE_ROW_DATE_STAMP|cot_date('d.m.Y H:i', $this, false)} 


3. Предопределённые форматы (рекомендуемый способ)

В Cotonti существуют заранее определённые форматы, хранящиеся в языковых файлах (main.*.lang.php) в массиве $Ldt.

Использование этих форматов рекомендуется, поскольку:

  • они учитывают язык системы,
  • поддерживают локализацию месяцев и дней недели,
  • обеспечивают единообразие.

Пример:

{PAGE_ROW_DATE_STAMP|cot_date('date_full', $this)} 


4. Список стандартных форматов (RU)

NameFormatПример
date_fulld.m.Y13.02.2009
date_mediumm.Y02.2009
date_shortd.m13.02
date_textd F Y13 февраля 2009
date_fulltextl, d F YПятница, 13 февраля 2009
time_fullH:i:s23:31:30
time_mediumG:i23:31
time_shorti:s31:30
datetime_fulld.m.Y H:i:s13.02.2009 23:31:30
datetime_mediumd.m.Y H:i13.02.2009 23:31
datetime_shortd.m H:i13.02 23:31
datetime_textd F Y H:i13 февраля 2009 23:31
datetime_fulltextl, d F Y H:iПятница, 13 февраля 2009 23:31

5. Использование произвольного формата

Можно задать любой формат PHP date():

{PAGE_DATE_STAMP|cot_date('l jS F Y h:i:s A', $this)}

Результат:

Friday 13th February 2009 11:31:30 PM

Другие примеры:

{PAGE_DATE_STAMP|cot_date('c', $this)}

ISO 8601:

2009-02-13T23:31:30+03:00 {PAGE_DATE_STAMP|cot_date('r', $this)}

RFC 5322:

Fri, 13 Feb 2009 23:31:30 +0300 


6. Использование ISO-недели

Cotonti поддерживает вывод ISO-недели:

{PAGE_DATE_STAMP|cot_date('week_full', $this)}

Пример:

2009-W07

Если неделя относится к соседнему году — будет отображён соответствующий ISO-год (o).


7. Примеры работы с различными тегами

{PHP.pag.page_date|cot_date('datetime_full', $this)} {PHP.pag.page_updated|cot_date('date_text', $this)} {PHP.item.item_updated|cot_build_timeago()}

Последний пример использует относительный формат:

3 часа назад 


8. Расширенный список символов форматирования

Формат определяется правилами PHP date().

День

СимволОписаниеПример
dДень с ведущим нулём01–31
jДень без нуля1–31
lПолное название дняMonday
DКороткое названиеMon

Месяц

СимволОписаниеПример
mМесяц с нулём01–12
nБез нуля1–12
FПолное названиеJanuary
MКороткое названиеJan

Год

СимволОписание
Y2024
y24
oISO-год

Время

СимволОписание
H00–23
G0–23
h01–12
iМинуты
sСекунды
AAM/PM

Часовой пояс

СимволОписание
O+0300
P+03:00
TEET
eEurope/Moscow
ZСмещение в секундах

Полные форматы

СимволФормат
cISO 8601
rRFC 5322
UUNIX timestamp

9. Учет временной зоны пользователя

Cotonti может учитывать индивидуальную временную зону пользователя.

Если включено:

cot_date('datetime_full', $stamp)

система автоматически добавит смещение:

Cot::$usr['timezone'] * 3600

Если нужно вывести серверное время без корректировки:

{PAGE_DATE_STAMP|cot_date('datetime_full', $this, false)} 


10. Глобальная настройка форматов

Чтобы изменить формат по всей системе:

  1. Откройте файл:

    main.ru.lang.php

  2. Найдите массив $Ldt
  3. Измените формат:

Например:

$Ldt['date_full'] = 'Y-m-d';

После этого все вызовы cot_date('date_full', ...) будут использовать новый формат.


11. Рекомендации по проектированию шаблонов

✔ Используйте предопределённые форматы
✔ Не дублируйте формат вручную в десятках шаблонов
✔ Учитывайте локализацию
✔ Используйте ISO 8601 (c) для API
✔ Используйте timeago для новостей


12. Частые ошибки

1. Передача строки вместо timestamp

Нельзя:

{PAGE_DATE|cot_date('d.m.Y', $this)}

если PAGE_DATE содержит строку.

2. Использование несуществующего формата

{PAGE_DATE_STAMP|cot_date('xxx', $this)}

Если 'xxx' отсутствует в $Ldt, он будет интерпретирован как обычный формат date().


13. Когда использовать произвольный формат, а когда системный?

СитуацияЧто использовать
Стандартный выводdate_full
Новостиdatetime_full
SEO-разметкаc
APIc
RSSr
Человекочитаемый текстdate_text

14. Лучшие практики

  1. Всегда работайте с timestamp.
  2. В шаблонах применяйте cot_date().
  3. Для расширений используйте предопределённые форматы.
  4. Не меняйте формат напрямую в десятках мест.
  5. Проверяйте влияние часового пояса.

15. Итог

Система вывода дат в Cotonti построена на трёх принципах:

  1. Хранение — всегда UNIX timestamp.
  2. Отображение — через cot_date().
  3. Локализация — через языковые файлы.

Благодаря этому:

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

Грамотное использование cot_date() и предопределённых форматов гарантирует корректную работу дат в шаблонах, расширениях, API и пользовательском интерфейсе.

Даты в CMF Cotonti. Запись, хранение и вывод (представление)

Расширенный раздел: примеры вывода дат в шаблонах

В этом разделе собраны реальные примеры использования фильтра cot_date в шаблонах Cotonti. Все примеры основаны на стандартных тегах модуля «Страницы», «Пользователи», «Комментарии» и других. Представлены как предопределённые форматы, так и произвольные, с учётом временной зоны и без.


1. Базовые примеры для страниц (page.tpl)

ТегОписаниеПример вывода
{PAGE_DATE_STAMP|cot_date('date_full', $this)}Только дата в формате ДД.ММ.ГГГГ11.12.2021
{PAGE_DATE_STAMP|cot_date('date_text', $this)}Дата + месяц текстом11 декабря 2021
{PAGE_DATE_STAMP|cot_date('datetime_full', $this)}Дата и время полные11.12.2021 15:30:45
{PAGE_DATE_STAMP|cot_date('datetime_text', $this)}Дата текстом + время11 декабря 2021 15:30
{PAGE_DATE_STAMP|cot_date('time_full', $this)}Только время15:30:45
{PAGE_DATE_STAMP|cot_date('time_medium', $this)}Время без секунд15:30
{PAGE_BEGIN_STAMP|cot_date('date_full', $this)}Дата начала публикации01.01.2026
{PAGE_EXPIRE_STAMP|cot_date('date_full', $this)}Дата окончания публикации31.12.2026
{PAGE_UPDATED_STAMP|cot_date('datetime_text', $this)}Дата обновления15 марта 2026 10:15

2. Примеры с проверкой наличия значения

Часто нужно выводить блок только если дата заполнена (не равна 0). Используется условный тег <!-- IF ... -->:

html

<!-- IF {PAGE_EXPIRE_STAMP} > 0 -->
	<div class="expire-notice">
	Страница будет скрыта: {PAGE_EXPIRE_STAMP|cot_date('date_full', $this)}
	</div>
<!-- ENDIF -->

Для page_begin проверка аналогична:

html

<!-- IF {PAGE_BEGIN_STAMP} > 0 && {PAGE_BEGIN_STAMP} > {PHP.sys.now} -->
	<div class="future-notice">
	Страница начнёт публиковаться: {PAGE_BEGIN_STAMP|cot_date('datetime_text', $this)}
	</div>
<!-- ENDIF -->

3. Примеры с отключением учёта часового пояса

Иногда нужно показать серверное время (UTC) без коррекции под пользователя. Для этого передаётся третий параметр false:

html

<!-- Серверное время публикации -->
	<div class="server-time">
	По серверу: {PAGE_DATE_STAMP|cot_date('datetime_full', $this, false)}
</div>

Это полезно в административных интерфейсах или при отладке.


4. Примеры с произвольными форматами

Используются любые форматы, поддерживаемые PHP date():

html

<!-- День недели, число, месяц, год -->
	<div class="custom-date">
	{PAGE_DATE_STAMP|cot_date('l, j F Y', $this)} <!-- Пятница, 11 декабря 2021 -->
	</div>
	<!-- Время в 12-часовом формате с AM/PM -->
	<div class="custom-time">
	{PAGE_DATE_STAMP|cot_date('h:i A', $this)} <!-- 03:30 PM -->
	</div>
	<!-- ISO 8601 (для микроразметки) -->
	<meta itemprop="datePublished" content="{PAGE_DATE_STAMP|cot_date('c', $this)}">
	<!-- RFC 5322 (для RSS) -->
	<pubDate>{PAGE_DATE_STAMP|cot_date('r', $this)}</pubDate>
	<!-- Только год и месяц -->
	<div class="archive-link">
	{PAGE_DATE_STAMP|cot_date('Y-m', $this)} <!-- 2021-12 -->
	</div>
	<!-- Номер недели по ISO -->
	<div class="week-number">
	Неделя {PAGE_DATE_STAMP|cot_date('W', $this)}
	</div>
	<!-- День года -->
	<div class="day-of-year">
	День {PAGE_DATE_STAMP|cot_date('z', $this)} с начала года
</div>

5. Примеры для разных модулей

5.1. Пользователи (users.profile.tpl)

ТегОписаниеПример
{USER_REGDATE_STAMP|cot_date('date_text', $this)}Дата регистрации5 марта 2020
{USER_LASTLOG_STAMP|cot_date('datetime_full', $this)}Последний визит01.03.2026 19:22:10
{USER_BIRTHDATE_STAMP|cot_date('date_full', $this)}Дата рождения (если заполнена)15.08.1985

5.2. Комментарии (comments.tpl)

html

<!-- В цикле комментариев -->
	<div class="comment-meta">
	<span class="comment-date">
	{COMMENT_ROW_DATE_STAMP|cot_date('datetime_text', $this)}
	</span>
	<!-- Если комментарий редактировался -->
	<!-- IF {COMMENT_ROW_UPDATED} > 0 -->
	<span class="comment-edited">
	(ред. {COMMENT_ROW_UPDATED_STAMP|cot_date('time_medium', $this)})
	</span>
	<!-- ENDIF -->
</div>

5.3. Форум (forum.posts.tpl)

html

<div class="post-header">
	<span class="post-date">
	{POST_ROW_DATE_STAMP|cot_date('datetime_full', $this)}
	</span>
	<!-- IF {POST_ROW_UPDATED} > 0 -->
	<span class="post-edited">
	Изменено: {POST_ROW_UPDATED_STAMP|cot_date('datetime_text', $this)}
	</span>
	<!-- ENDIF -->
</div>

5.4. Список страниц (list.tpl)

В цикле списка используются теги с префиксом LIST_ROW_:

html

<!-- BEGIN: ROW -->
	<div class="list-item">
	<h3><a href="{LIST_ROW_URL}">{LIST_ROW_TITLE}</a></h3>
	<div class="list-meta">
	Опубликовано: {LIST_ROW_DATE_STAMP|cot_date('date_full', $this)}
	<!-- Если есть дата окончания и она скоро -->
	<!-- IF {LIST_ROW_EXPIRE_STAMP} > 0 && {LIST_ROW_EXPIRE_STAMP} < {PHP.sys.now}+7*86400 -->
	<span class="expire-warning">
	(скоро скрывается: {LIST_ROW_EXPIRE_STAMP|cot_date('date_short', $this)})
	</span>
	<!-- ENDIF -->
	</div>
	</div>
<!-- END: ROW -->

6. Примеры с относительными датами (timeago)

Если в системе установлен плагин, предоставляющий функцию cot_build_timeago(), её можно использовать для вывода относительных дат:

html

<div class="timeago">
	{PAGE_DATE_STAMP|cot_build_timeago($this)}
</div>

Пример вывода: «3 часа назад», «вчера», «15 минут назад». Это улучшает восприятие для недавних событий.


7. Примеры для экстраполей

Если создано экстраполе типа «дата» (например, product_release), его теги формируются аналогично:

html

<div class="product-release">
	Дата выхода: {PRODUCT_RELEASE_STAMP|cot_date('date_text', $this)}
</div>

8. Примеры с множественными форматами в одном блоке

Иногда требуется вывести разные представления одной даты, например, для микроразметки и для людей:

html

<div class="event" itemscope itemtype="http://schema.org/Event">
	<meta itemprop="startDate" content="{PAGE_BEGIN_STAMP|cot_date('c', $this)}">
	<div class="event-date">
	Начало: {PAGE_BEGIN_STAMP|cot_date('datetime_text', $this)}
	</div>
	<div class="event-countdown">
	<!-- Вывод, сколько осталось дней -->
	<!-- IF {PAGE_BEGIN_STAMP} > {PHP.sys.now} -->
	Осталось: {PHP|ceil(({PAGE_BEGIN_STAMP}-{PHP.sys.now})/86400)} дней
	<!-- ENDIF -->
	</div>
</div>

9. Примеры с учётом часового пояса в форме

В форме редактирования страницы уже используется cot_selectbox_date, но если нужно вывести предварительный просмотр даты с учётом пояса:

html

<div class="preview">
	Выбранная дата (ваш часовой пояс): {PHP|cot_date('datetime_full', {PAGE_DATE_STAMP})}
</div>

10. Примеры для сложных условий

10.1. Проверка, что дата начала уже наступила, но дата окончания ещё нет

html

<!-- IF {PAGE_BEGIN_STAMP} <= {PHP.sys.now} && ({PAGE_EXPIRE_STAMP} == 0 || {PAGE_EXPIRE_STAMP} > {PHP.sys.now}) -->
	<div class="active">Страница активна</div>
<!-- ENDIF -->

10.2. Вывод даты окончания, если она есть, иначе «бессрочно»

html

<div class="expire">
	<!-- IF {PAGE_EXPIRE_STAMP} > 0 -->
	Действует до: {PAGE_EXPIRE_STAMP|cot_date('date_full', $this)}
	<!-- ELSE -->
	Действует: бессрочно
	<!-- ENDIF -->
</div>

10.3. Форматирование timestamp для JavaScript

Иногда нужно передать timestamp в JavaScript для дальнейшей обработки (например, для своих скриптов). Можно вывести его как число:

html

<script>
	var pageDate = {PAGE_DATE_STAMP}; // 1639236600
	var pageBegin = {PAGE_BEGIN_STAMP}; // 1699716120
</script>

11. Полный пример блока с датами для страницы

html

<div class="page-meta">
	<div class="meta-item">
	<span class="meta-label">Создано:</span>
	<span class="meta-value">{PAGE_DATE_STAMP|cot_date('datetime_text', $this)}</span>
	</div>
	<!-- IF {PAGE_BEGIN_STAMP} > 0 -->
	<div class="meta-item">
	<span class="meta-label">Начало публикации:</span>
	<span class="meta-value">{PAGE_BEGIN_STAMP|cot_date('datetime_text', $this)}</span>
	<!-- IF {PAGE_BEGIN_STAMP} > {PHP.sys.now} -->
	<span class="meta-note">(будет опубликована)</span>
	<!-- ENDIF -->
	</div>
	<!-- ENDIF -->
	<!-- IF {PAGE_EXPIRE_STAMP} > 0 -->
	<div class="meta-item">
	<span class="meta-label">Окончание публикации:</span>
	<span class="meta-value">{PAGE_EXPIRE_STAMP|cot_date('datetime_text', $this)}</span>
	<!-- IF {PAGE_EXPIRE_STAMP} < {PHP.sys.now} -->
	<span class="meta-note">(публикация истекла)</span>
	<!-- ENDIF -->
	</div>
	<!-- ENDIF -->
	<div class="meta-item">
	<span class="meta-label">Последнее обновление:</span>
	<span class="meta-value">{PAGE_UPDATED_STAMP|cot_date('datetime_text', $this)}</span>
	<!-- Использование timeago -->
	<span class="meta-timeago">({PAGE_UPDATED_STAMP|cot_build_timeago($this)})</span>
	</div>
</div>

Заключение по примерам

Представленные примеры охватывают 90% реальных ситуаций, возникающих при разработке шаблонов для Cotonti. Ключевые моменты:

Всегда используйте _STAMP-теги (которые содержат timestamp) для передачи в cot_date.

7 минут чтения Sodium Carbonate

Комментарии (0)

Комментарии отсутствуют
Добавление комментариев доступно только зарегистрированным пользователям

Автор контента

webitproff

Оффлайн

Sodium Carbonate

Последняя авторизация: 20.07.2026 04:22

  • Страница размещена: 01.03.2026 01:35
  • Последнее обновление: 01.03.2026 10:41

Похожие страницы

Примеры использования тегов для вывода дат разных форматов в шаблонах
1 Примеры использования стандартных форматов в шаблонахНиже приведены примеры шаблонных тегов для каждого
Подготовка дат в Excel и Google Таблицах для импорта в Cotonti
2 Подготовка дат в Excel и Google Таблицах для импорта в CotontiЦель документаДанный материал предназначен для
Даты в CMF Cotonti. Запись, хранение и вывод (представление)
3 Ниже приведён системный обзор механики работы с датами в CMF Cotonti на основе структуры таблицы cot_pages и набора
Форматирование дат и времени в Cotonti
4 Форматирование дат и времени в CotontiВ Cotonti даты и время по умолчанию отображаются в удобном для большинства
Преобразование Дат в Excel и Google Sheets
5 Преобразование Дат в Excel и Google Sheets для Импорта в CotontiЭта документация фокусируется на практических