Сервер витрины и её посетители живут в разных часовых поясах, а база данных — в третьем. Чтобы это не приходилось держать в голове в каждом модуле, платформа даёт один метод, который всегда работает в поясе проекта.
DateTime($mHow = 'now', $mFormat = "Y-m-d H:i:s")
возвращает отформатированную дату в часовом поясе
проекта, заданном в конфигурации
(MELBIS_TIME_ZONE), а не в поясе сервера. Формат по
умолчанию — тот, в котором даты хранятся в БД, поэтому метод одинаково
удобен и для записи в таблицу, и для вывода посетителю.
// Текущее время в формате БД
$now = MELBIS()->DateTime();
// Разбор строки и произвольный формат
$year = MELBIS()->DateTime($store['create_time'], 'Y');
// Относительные выражения понимаются, как в strtotime
$deadline = MELBIS()->DateTime('now + 3 day');
// Число на входе трактуется как UNIX timestamp
$stamp = MELBIS()->DateTime(1767225600, 'd.m.Y');Первый аргумент принимает три вида значений: строку с датой из базы,
строку с относительным выражением ('now + 3 day',
'last monday') и число — оно трактуется как UNIX-timestamp.
Второй аргумент — обычная строка формата PHP.
Пользуйтесь DateTime вместо date(): на
сервере, живущем в UTC, date() покажет посетителю не то
время, которое он ожидает увидеть, и запишет в базу дату, разъезжающуюся
с остальными.
В вёрстке дату форматировать через PHP не нужно — для этого есть
модификаторы date и idate (второй подставляет
название месяца на текущем языке витрины). Из модуля дата передаётся как
есть, в том виде, в каком лежит в базе:
MELBIS()->TplAssign($tpl, 'ORDER', $order);Заказ от {ORDER:CREATE_TIME|idate:d MMMM yyyy}У idate формат задаётся в стандарте ICU, а не PHP, —
подробнее в разделе «Модификаторы».