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

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

0 Published Filed under: Cotonti Siena CMF > Cotonti - reading materials. Documentation.

Вывод дат в шаблонах 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.

No comments yet
Only registered users can post new comments
webitproff
webitproff

Offline

Last logged: 2026-10-20 01:59

About me briefly
Support and development of web projects on the CMF Cotonti: private messengers via the website, open and closed small social networks, trading platforms and marketplaces, freelance and services exchange portal, catalogs of goods from wholesale suppliers, dropshipping platforms, online stores, and much more.
Telegram for messages
@webitproff
Telegram channel
@s/aBuyFILE
Public profile
  • Date published 2026-03-01 01:35
  • Updated 2026-03-01 10:41

Similar pages

Примеры использования тегов для вывода дат разных форматов в шаблонах
1 Примеры использования стандартных форматов в шаблонахНиже приведены примеры шаблонных тегов для каждого
Примеры: Вывод даты создания статьи в Cotonti: все способы
2 Все основные модификации вывода даты создания статьи (PAGE_CREATED) В этой статье рассмотрены все основные способы
Системные хуки Cotonti. Список и примеры. Полное руководство
3 Системные хуки Cotonti. Полное руководство. Введение Данное руководство описывает системные хуки Cotonti — точки
Подготовка дат в Excel и Google Таблицах для импорта в Cotonti
4 Подготовка дат в Excel и Google Таблицах для импорта в CotontiЦель документаДанный материал предназначен для
Форматирование дат и времени в Cotonti
5 Форматирование дат и времени в CotontiВ Cotonti даты и время по умолчанию отображаются в удобном для большинства