EnotPRO Logo EnotPRO

time

Макрос !{time} предназначен для работы с датами и временем: парсинга, форматирования, вычислений и манипуляций.

Возможности

Получить текущее время

  • !{time|value:now}

Отформатировать дату

  • !{time|value:now; output_format:DD.MM.YYYY}

Прибавить/вычесть время

  • !{time|value:now; plus:3D12h30m}

Округлить время

  • !{time|value:now; round:hour}

Сменить часовой пояс

  • !{time|value:now; output_timezone:UTC}

Отобразить в Telegram-формате

  • !{time|value:now; tg_format:r}

💡 Совет: Макрос можно вставлять в любое место, где поддерживаются переменные: текст сообщения, заголовки HTTP-запросов, тело запроса, настройки отложенных действий.

Синтаксис

!{time|
  параметр1: значение1;
  параметр2: значение2;
}

Правила:

  • Макрос начинается с !{time| и заканчивается }
  • Параметры разделяются символом ; (точка с запятой)
  • Рекомендуется каждый параметр писать с новой строки для удобства чтения

Входные параметры (источник времени)

Параметр Описание Пример
value Исходное время для обработки now, 2025-11-03T13:02:12+03:00

По умолчанию принимает:

  • now — текущее время (в часовом поясе бота)
  • RFC3339 формат — например, 2025-11-03T13:02:12+03:00
  • Для других форматов необходимо указать input_format или format1
  • Для Unix timestamp на входе указать input_format:unix (секунды) или input_format:unixMilli (миллисекунды)

Форматы времени

Параметры форматов

Параметр Синоним Описание
input_format format1 Формат для парсинга входного значения value
output_format format2 Формат вывода результата (по умолчанию: RFC3339)
tg_format format3 Обёртка в для Telegram

Стандартные форматы (названия)

Формат Результат (пример)
ANSIC Mon Jan _2 15:04:05 2006
UnixDate Mon Jan _2 15:04:05 MST 2006
RubyDate Mon Jan 02 15:04:05 -0700 2006
RFC822 02 Jan 06 15:04 MST
RFC822Z 02 Jan 06 15:04 -0700
RFC850 Monday, 02-Jan-06 15:04:05 MST
RFC1123 Mon, 02 Jan 2006 15:04:05 MST
RFC1123Z Mon, 02 Jan 2006 15:04:05 -0700
RFC3339 2006-01-02T15:04:05Z07:00
RFC3339Nano 2006-01-02T15:04:05.999999999Z07:00
Kitchen 3:04PM
DateTime 2006-01-02 15:04:05
DateOnly 2006-01-02
TimeOnly 15:04:05

Специальные значения (для input_format и output_format):

Значение Описание
unix Unix timestamp (секунды)
unixMilli Unix timestamp (миллисекунды)

Пользовательский формат (буквенные паттерны)

Паттерн Описание Пример
D День (1-31) 5
DD День с нулём (01-31) 05
DDD День недели, сокращённо Mon
DDDD День недели, полностью Monday
M Месяц (1-12) 6
MM Месяц с нулём (01-12) 06
MMM Месяц, сокращённо Jun
MMMM Месяц, полностью June
YY Год, 2 цифры 24
YYYY Год, 4 цифры 2024
h Час (0-23) 14
hh Час с нулём (00-23) 14
H Час 12-часовой (1-12) 2
HH Час 12-часовой с нулём (01-12) 02
m Минута (0-59) 5
mm Минута с нулём (00-59) 05
s Секунда (0-59) 7
ss Секунда с нулём (00-59) 07
l Миллисекунды (0-999) 123
a am/pm (строчные) pm
A AM/PM (заглавные) PM
z Временная зона, сокращённая +3
zz Временная зона, полная +03:00
zzz Временная зона, буквами MSK
W Номер недели (1-53) 42
N Номер дня недели (1-7, где 1 = понедельник) 2

Экранирование текста (литералы)

Если в формате есть буквенный текст, который совпадает с паттернами (D, M, Y, h, m, s, a, A, z, l, W, N), заключите его в квадратные скобки [текст].

Примеры:

Формат Результат
[Дата:] DD.MM.YYYY Дата: 31.12.2024
YYYY[г.] MM[м.] DD[д.] 2024г. 12м. 31д.
[Сегодня] DDDD Сегодня Tuesday

⚠️ Важно: Без скобок D в слове «Сегодня» было бы воспринято как паттерн дня.

Telegram tg-time форматирование

Параметр tg_format оборачивает результат в HTML-сущность <tg-time>. Telegram отображает такие даты в локализованном формате пользователя.

Допустимые значения:

Флаг Описание
r Относительное время («через 5 минут», «вчера»). Не комбинируется с другими флагами
w День недели
d Дата в коротком виде (17.03.22)
D Дата в длинном виде (March 17, 2022)
t Время в коротком виде (22:45)
T Время в длинном виде (22:45:00)

Комбинации: флаги можно комбинировать: wDT, wt, Dt и т.д.

💡 Текст внутри тега (output_format) используется как fallback (если Telegram не может отобразить tg-time).

Манипуляции со временем

Добавление/вычитание длительности

Параметр Описание Пример
plus Добавить длительность plus:1h30m15s
minus Вычесть длительность minus:7D

Формат длительности: [число] [единица]

Доступные единицы:

Единица Описание
Y Годы
M Месяцы
D Дни
h Часы
m Минуты
s Секунды

Комбинирование:

* plus:1Y2M3D
* plus:12h30m
* plus:2D12h30m15s

Особенности сдвига месяцев/лет:

При сдвиге на годы или месяцы день прижимается к последнему дню результирующего месяца:

Исходная дата Операция Результат
31.01.2025 + 1M 28.02.2025 (а не 03.03.2025)
31.01.2024 + 1M 29.02.2024 (високосный год)
31.03.2025 - 1M 28.02.2025

Установка следующего дня недели (next)

Значение (англ) Значение (рус) Описание
monday / mon понедельник / пн Следующий понедельник
tuesday / tue вторник / вт Следующий вторник
wednesday / wed среда / ср Следующая среда
thursday / thu четверг / чт Следующий четверг
friday / fri пятница / пт Следующая пятница
saturday / sat суббота / сб Следующая суббота
sunday / sun воскресенье / вс Следующее воскресенье
weekend выходной Ближайшая суббота или воскресенье
weekday будний / рабочий Ближайший будний день (пн-пт)

Установка компонентов времени

Параметр Диапазон Пример
setYear произвольный setYear:2025
setMonth 1-12 setMonth:12
setDay 1-31 setDay:15
setHour 0-23 setHour:14
setMinute 0-59 setMinute:30
setSecond 0-59 setSecond:0

Особенности установки года и месяца:

Если текущий день не помещается в новом месяце/году — прижимается к последнему дню:

Исходная дата Операция Результат
29.02.2024 setYear:2025 28.02.2025
31.01.2025 setMonth:2 28.02.2025

Округление

Параметр Значения Описание
round second, minute, hour, day, week, month, year Округление до ближайшего значения
truncate second, minute, hour, day, week, month, year Обрезание (округление вниз)

Примеры:

Вызов Результат (если сейчас 14:30:45)
round:hour 15:00:00
truncate:hour 14:00:00
round:day сегодня 00:00 (до 12:00) или завтра 00:00 (после 12:00)
truncate:day сегодня 00:00:00

Часовые пояса

Параметр Синоним Описание
input_timezone timezone1 Часовой пояс входного времени (по умолчанию: часовой пояс бота)
output_timezone timezone2 Часовой пояс выходного времени (по умолчанию: часовой пояс бота)

Форматы:

Тип Пример
IANA timezone Europe/Moscow, America/New_York, UTC
Числовое смещение 3, +3, +03, +03:00, -5, -05:00

Порядок выполнения операций

Операции выполняются строго в следующем порядке:

Операция Примеры параметров
1 Получение входного времени value, input_format, input_timezone
2 Установка компонентов setYear, setMonth, setDay, setHour, setMinute, setSecond
3 Следующий день недели next
4 Арифметика plus, minus
5 Округление round, truncate
6 Смена часового пояса output_timezone
7 Форматирование вывода output_format
8 Обёртка в <tg-time> tg_format

Примеры

Простые примеры (80% сценариев)

Текущая дата в формате ДД.ММ.ГГГГ

!{time|value:now; output_format:DD.MM.YYYY}

Текущее время ЧЧ:ММ:СС

!{time|value:now; output_format:hh:mm:ss}

Текущая дата и время

!{time|value:now; output_format:YYYY-MM-DD hh:mm:ss}

Завтрашняя дата

!{time|value:now; plus:1D; output_format:DD.MM.YYYY}

Через 1 час 30 минут

!{time|value:now; plus:1h30m; output_format:hh:mm}

Арифметика

Через 3 дня, 12 часов, 30 минут

!{time|value:now; plus:3D12h30m}

Результат: 2026-05-28T03:00:45+03:00

Ровно 1 год назад

!{time|value:now; minus:1Y; output_format:DD.MM.YYYY}

Результат: 25.05.2025

Через 2 года, 3 месяца, 5 дней

!{time|value:now; plus:2Y3M5D; output_format:DD.MM.YYYY}

Результат: 30.08.2028 (с учётом прижатия дня)

Определение конкретной даты

Сегодня в 23:59:59

!{time|value:now; setHour:23; setMinute:59; setSecond:59; output_format:hh:mm:ss}

Результат: 23:59:59

Первый день текущего месяца в 00:00

!{time|value:now; setDay:1; truncate:day; output_format:DD.MM.YYYY hh:mm}

Результат: 01.05.2026 00:00

Ближайший понедельник

!{time|value:now; next:monday; output_format:DD.MM.YYYY}

Результат: 01.06.2026 (если сегодня 25.05.2026)

Unix timestamp

Получить текущий Unix timestamp (секунды)

!{time|value:now; output_format:unix}

Результат: 1748147400

Преобразовать Unix timestamp в дату

!{time| value: 1748147400; input_format: unix; output_format: DD.MM.YYYY hh:mm }

Результат: 25.05.2026 14:30

Telegram tg-time формат

Относительное время (Telegram сам покажет "через 5 минут" и т.д.)

!{time|value:now; plus:10m; tg_format:r}

Результат: через 10 минут

День недели + дата + время

!{time|value:now; plus:3D; tg_format:wDT}

** Результат: чт, 28 мая 2026 г., 14:30

Только дата и время

!{time|value:now; plus:3D; tg_format:dt}

Результат: 28 мая 2026 г., 14:30

Резюме

Текущая дата

!{time|value:now; output_format:DD.MM.YYYY}

Текущее время

!{time|value:now; output_format:hh:mm:ss}

Прибавить N дней

!{time|value:now; plus:ND; ...}

Вычесть N часов

!{time|value:now; minus:Nh; ...}

Unix timestamp → дата

!{time|value:1234567890; input_format:unix; output_format:DD.MM.YYYY}

Telegram-формат

!{time|value:now; tg_format:wDT}

Сменить часовой пояс

!{time|value:now; output_timezone:UTC}

Связанные разделы

Макросы — общая документация по макросам

Переменные — работа с переменными

© 2025 EnotPRO. Все права защищены.