Обработка даты в PROScript
В шаблоне письма можно работать как с текущей датой, так и с датой, переданной из анкетных данных получателя письма.
По умолчанию при отсутствующем шаблоне форматирования даты мы пытаемся нормализовать входную строку в необходимый для работы формат даты и времени.
Временная зона по умолчанию — Europe/Moscow
datetime()
Получение из строки объекта типа датавремя:
[% dt = datetime('2008-05-30 00:00:00','pattern' => '....', 'time_zone' => ...., ......) %]
datetime_now()
Получаем текущую дату:
[% dt = datetime_now('time_zone' => ...., ......) %]
date.format()
Форматируем дату в нужный формат
[% d = date.format(datetime_now(),"%m%d","en_EN.UTF-8") %]
если надо взять дату из анкеты:
[% dt = datetime(anketa.foo.bar)%]
[% dt = date.format(dt,"%m%d","en_EN.UTF-8") %]
Шаблоны форматирования даты
%a — день недели (сокр.)
%A — день недели
%b — месяц (сокр.)
%B — месяц
%c — ctime формат: Thu 22 Feb 2024 04:15:21 PM MSK
%d — день месяца с ведущими нулями (01..31)
%e — день месяца, но без ведущих нулей
%D — MM/DD/YY
%G — номер недели GPS (кол-во недель с 6 января 1980)
%h — тоже самое, что и %b
%H, %k — час, 24-часовая система, ведущие нули
%I, %l — час, 12-часовая система, ведущие нули
%j — д ень года c ведущими нулями
%m — номер месяца с ведущими нулями
%M — минута с ведущими нулями
%p — AM или PM
%P — am или pm
%r, %X — время в формате: 09:05:57 PM
%R — время в формате: 21:05
%s — секунд с начала Эпохи (компьютерное время, начиная с 00:00:00 1 января 1970 г.)
%S — секунд, ведущие нули
%T — время в формате: 21:05:57
%U — номер недели в году (воскресенье первый день недели)
%w — номер дня недели, Воскресенье == 0
%W — номер недели в году (понедельник первый день недели)
%x — дата в формате: 02/22/2024
%y — год (2 символа)
%Y — год (4 символа)
%Z — временная зона в символах, напр. MSK
Изменение даты перед использованием
Иногда нужно вывести не конкретную дату, а ее измененное значение. Для этого вы можете добавить к имеющейся дате необходимые периоды времени:
[% date.format(datetime_now().add("years","+7")) %]
[% date.format(datetime_now().add("months","+7")) %]
[% date.format(datetime_now().add("days","+7")) %]
[% date.format(datetime_now().add("hours","+7")) %]
[% date.format(datetime_now().add("minutes","+7")) %]
[% date.format(datetime_now().add("seconds","+7")) %]
Чтобы отнять период:
[% date.format(datetime_now().add("days","-7")) %]
Использовать дату выпуска, как базовую дату:
[% date.format(datetime(param.issue.date).add("days","+7"),"%d.%m.%Y") %]
Использовать анкетные данные, как базовую дату:
[% date.format(datetime(anketa.a917.q904).add("days","+7"),"%d.%m.%Y") %]
format_datetime_duration(dta,dtb)
Иногда требуется сравнить две даты и получить интервал.
[% format_datetime_duration(dta,dtb) %]
[% format_datetime_duration(dta,dtb,"format":"FMT") %]
Перед вами могу стоять две задачи: просто посчитать интервал с нужной точностью или вывести полученный интервал с желаемым форматированием.
Вначале разберёмся с форматированием результата сравнения.
В примерах использованы значения
[% dta = "2018-02-26T15:13:00" %]
[% dtb = "2018-02-05 12:11:58" %] <---- наличие T без разницы
Форматирование задается в в параметре format и может быть двух типов:
строка — один из предустановленых форматов описанных ниже
массив — от одного до четырёх элементов задающих, что приписать справа после компоненты времени
длительность в секундах
[ s ]
длительность в секундах и минутах
[ m, s ]
длительность в секундах, минутах и часах
[ h, m, s ]