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 | Обёртка в |
Стандартные форматы (названия)
| Формат | Результат (пример) |
|---|---|
| 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}
Связанные разделы
Макросы — общая документация по макросам
Переменные — работа с переменными