Робота з датами та часом
MaviBot працює з такими форматами ДАТИ та ЧАСУ:
для дат – "dd.mm.yyyy" для часу – "HH:MM"
Змінні
Для роботи з датами та часом ви можете використовувати такі змінні:
current_date - поточна дата у форматі dd.mm.yyyy, залежно від часового поясу проєкту next_day - завтрашня дата у форматі dd.mm.yyyy; корисно для планування повідомлень current_time - поточний час у форматі hh:mm, залежно від часового поясу проєкту weekday - день тижня як число: понеділок = 1, вівторок = 2 тощо.
Швидкий доступ до описів функцій:
Як додати час до часу
Ви можете порівнювати дати та час за допомогою логічних операторів так само, як числа.
addYear() | addMonth() | addDays() | addMinutes()
Опис
addYear(date, years_to_add) - обчислює нову дату, додаючи до заданої дати вказану кількість років, з урахуванням високосних років. Використовуйте від’ємне число, щоб відняти роки.
addMonth(date, months_to_add) - обчислює нову дату, додаючи до заданої дати вказану кількість місяців, з урахуванням високосних років. Використовуйте від’ємне число, щоб відняти місяці.
addDays(date, days_to_add) - додає до дати вказану кількість днів. Використовуйте від’ємне число, щоб відняти дні. Приклад: addDays(current_date, 20) або addDays('20.08.2019', -99)
addMinutes(time, minutes_to_add) - додає до часу вказану кількість хвилин. Використовуйте від’ємне число, щоб відняти хвилини. Приклад: addMinutes(current_time, 20) або addMinutes('20:08', -30)
'date' + days - додає до дати вказану кількість днів
'time' + minutes - додає до часу вказану кількість хвилин
Приклади
Приклад додавання певної кількості років до дати:


Приклад додавання певної кількості місяців до дати:


Приклад використання простої математичної операції — додавання днів до дати та хвилин до часу:


Приклад коду для копіювання
count = 2
date = '29.02.2020'
x = addYear(date, count)
y = addYear('31.12.2021', -1*count)
count = 10
date = '30.04.2019'
x = addMonth(date, count)
y = addMonth('31.12.2020', -1*count)
count = 10
date = '30.04.2019'
x = addMonth(date, count)
y = addMonth('31.12.2020', -1*count)
Як порівнювати час
Опис
Ви можете порівнювати дати та час за допомогою логічних операторів так само, як числа: більше ніж > , менше ніж < дорівнює == , не дорівнює != більше або дорівнює >= , менше або дорівнює <=
Умови порівняння також можна поєднувати за допомогою логічних операторів AND та OR.
Умови порівняння мають бути логічно узгодженими, тобто не можна створювати умови на кшталт a == 1 і a != 1, оскільки значення не може одночасно бути і рівним, і не рівним 1.
Умови порівняння вводяться в ) для збереження відповіді клієнта. .

Обов’язково використовуйте затримки, коли вказуєте умови порівняння в стрілці.

Приклад
'01.09.2020' < '11.10.2020'
'11.10.2020' >= current_date
current_date == date
current_time >= '18:00'
current_time <= '21:00'
Як встановити часові інтервали
Опис
Дуже корисною функцією для роботи з часовими інтервалами є:
time_interval('start_time', 'end_time')
Функція повертає логічне True або False.
Використовуйте цю функцію в блоках як умову в "Variable to compare" полі або в калькуляторі, використовуючи IF().
Функція дає змогу перевірити, чи поточний час потрапляє в заданий інтервал.
Приклад
time_interval('10:00','19:00') - перевіряє часовий інтервал з 10:00 до 19:00
time_interval('19:00','07:00') - перевіряє часовий інтервал з 19:00 до 07:00
time_interval('18.10.2021 10:00','25.10.2021 23:59:59') - перевіряє часовий інтервал між різними датами
time_interval('#{current_date} 10:00','#{date} 19:00') - перевіряє часовий інтервал, заданий за допомогою змінних
Давайте детальніше розглянемо перший приклад. Функція читається так:
Якщо користувач надсилає повідомлення, що містить слово "time", у період з 10:00 до 19:00, умова повертає true; інакше — false.
Це дає змогу створювати різні відповіді залежно від часу звернення клієнта. Наприклад, якщо поточний час між 10:00 і 19:00, клієнт отримає: "Менеджер відповість вам найближчим часом."
У будь-який інший час він отримає: "Менеджер наразі недоступний; ви отримаєте відповідь у робочий час з 10:00."
У полі Калькулятор введіть:
response = if(time_interval('10:00','19:00'), "Менеджер відповість вам найближчим часом", "Менеджер наразі недоступний; ви отримаєте відповідь у робочий час з 10:00")
У полі "Message" введіть: #{response}


Приклад коду для копіювання
response = if(time_interval('10:00','19:00'), "Менеджер відповість вам найближчим часом", "Менеджер наразі недоступний; ви отримаєте відповідь у робочий час з 10:00")
Як дізнатися, скільки часу залишилося до дня D
Приклад

Щоб обчислити, скільки часу залишилося до дня D:
Визначте дату й час цільового моменту, до якого ви хочете відраховувати час.
date_D = 10.10.2021 time_D = 12:00
Перетворіть це у timestamp формат:
timestampD = convert_datetime("#{date_D} #{time_D}", "%d.%m.%Y %H:%M", "%s")
Збережіть поточний час у timestamp формат:
timestamp0 = #{timestamp}
Округліть отримані значення до цілих чисел:
timeD = int(#{timestampD}) time0 = int(#{timestamp0})
Обчисліть різницю в секундах:
time = timeD - time0
Поділіть на кількість секунд у добі та округліть результат:
full_days = time/86400
days = int(#{full_days})
Обчисліть, скільки секунд залишилося від неповного дня:
c = days*86400
d = time - c
Обчисліть, скільки годин це становить, і округліть значення:
e = d/3600 hours = int(e)
Обчисліть, скільки секунд залишилося від неповних годин:
g = hours*3600
h = d - g
Перетворіть це на хвилини та округліть значення:
i = h/60
minutes = int(i)
Обчисліть, скільки секунд залишилося:
k = minutes*60
seconds = h - k
І виведіть час у «Текст повідомлення» :
Час до початку: #{days} днів #{hours} годин #{minutes} хвилин і #{seconds} секунд
Ось код для вставки в "Калькулятор" :

Поле Калькуляторі також підтримує віднімання дат і часу без перетворення типу. Наприклад:
'11.12.2021' - '8.12.2021' повертає 3 (дні)
'11:12' - '3:45' повертає 447 (хвилин)
Як дізнатися наступний день народження
Опис
Щоб бот надсилав привітання з днем народження, ви можете використати функцію:
birthdate(date) - повертає наступний найближчий день народження на основі дати народження людини: reminder = birthdate('28.04.1994')
Як отримати дату певного дня тижня
Опис
Якщо у вас є повторювані розсилки в певні дні тижня, ви можете отримати дату дня тижня, щоб запланувати розсилку.
weekday_date(weekday, b) - повертає дату найближчого вказаного дня тижня. Вона приймає два параметри:
Перший параметр — це номер дня тижня, який потрібно знайти (від 1 до 7, де 1 = понеділок, 7 = неділя).
Другий параметр визначає, чи повертати сьогоднішню дату, якщо вказаний день тижня — сьогодні. Цей параметр необов’язковий і за замовчуванням має значення False.
Розгляньмо приклад, щоб зрозуміти, як працює другий параметр:
Ви хочете запланувати повідомлення на четвер.
Але що, якщо клієнт щойно зареєструвався в четвер?
Чи слід надсилати повідомлення цього четверга чи наступного?
Другий параметр, встановлений у False, означає, що повідомлення буде надіслано лише наступного четверга (сьогодні пропускається).
Другий параметр, встановлений у True, означає, що повідомлення буде надіслано цього четверга, якщо сьогодні четвер (включно з днем реєстрації).
У нашому прикладі користувач реєструється в четвер, 13.02.2025, і ми хочемо надіслати повідомлення наступного четверга. Отже, повернене значення буде "20.02.2025".
Наприклад, weekday_date(4) поверне '20.02.2025'.
Якщо ви хочете, щоб поточний день враховувався лише до певного часу, можна використати таку конструкцію:
weekday_date(4, current_time < '13:00'), де умову можна замінити на будь-яку потрібну вам умову.
Ось приклад використання функції:
Приклад використання функції в полі "Send date" у зв’язці

Як отримати дату певного дня місяця
Опис
Якщо у вас є повторювані дії в певний день місяця, ви можете отримати дату найближчого настання цього дня, щоб запланувати розсилку.
month_date(date, b) - повертає найближчу дату місяця для вказаного номера дня. Вона приймає два параметри:
date - номер дня місяця, який потрібно знайти (від 1 до 31)
b - необов’язковий параметр; визначає, чи повертати сьогоднішню дату, якщо вона збігається з указаним днем. За замовчуванням має значення False.
Якщо ви передасте 31, але в поточному місяці лише 30 днів, функція поверне останній день місяця (наприклад, 30-те).
Наприклад:
Якщо сьогодні 05.04.2022 і ви викликаєте t = month_date(1), результатом буде 01.05.2022 - найближче 1-ше число місяця після сьогодні.
Як перевірити, чи поточний час у межах робочого часу
Опис
Наприклад, компанія працює з 9:00 до 18:00 і не працює в суботу та неділю. Давайте побудуємо перевірки крок за кроком:
Перевірте, чи час у межах робочого часу: current_time >= '9:00' AND current_time <= '18:00'
Перевірте, чи час поза межами робочого часу: current_time < '9:00' OR current_time > '18:00'
Перевірте, чи сьогодні робочий день (не субота і не неділя): weekday != 6 AND weekday != 7
Об’єднайте умови для написання в робочий час: current_time >= '9:00' AND current_time <= '18:00' AND weekday != 6 AND weekday != 7
Об’єднайте умови для написання поза робочим часом: current_time < '9:00' OR current_time > '18:00' OR weekday == 6 OR weekday == 7
Як конвертувати дату і час
Приклад
Формат дата-часу, що використовується, відрізняється в різних системах, і можливо, що один із інтегрованих ресурсів поверне час у форматі, який MaviBot не розпізнає. Вам потрібно буде його конвертувати.
convert_datetime(date, fin, f_out) - конвертує дату й час
Є три параметри:
Вхідний рядок дати
Рядок формату введення
Рядок формату виведення
Приклад:
convert_datetime("2011-11-03", "%Y-%m-%d", "%Y/%m/%d") на виході буде 2011/11/03
Ця функція перетворює вхідну дату у timestamp.
#{current_date} #{current_time} - перетворює у "06.01.2025 11:45" — оскільки немає інформації про секунди або мікросекунди, отриманий timestamp має нулі після десяткової крапки.
Наприклад: 1736144700.000000
Якщо ви вкажете мілісекунди після десяткової крапки,
convert_datetime("06.01.2025 19:26:35.123456", "%d.%m.%Y %H:%M:%S.%f", "%s.%f")
результат буде таким: 1736166395.123456
get_datetime(format) - функція для отримання поточного часу в певному форматі. Функція приймає один параметр — рядок, який вказує потрібний формат виведення.
Важливо! Відповіддю функції буде (Monday, Tuesday тощо). Приклад: get_datetime("%A") на виході буде Wednesday
Опис параметрів рядка формату, які вказуються у функції як рядки в лапках:
%a
Коротка назва дня тижня
Sun, Mon ...
%A
Повна назва дня тижня
Monday, Tuesday, …, Sunday
%w
День тижня як десяткове число, де 0 — неділя, а 6 — субота
0, 1, …, 6
%d
День місяця як десяткове число з доповненням нулями зліва
01, 02, …, 31
%b
Коротка назва місяця
Jan, Feb, …, Dec
%B
Повна назва місяця
January, February, March тощо.
%m
Місяць як десяткове число з доповненням нулями зліва
01, 02, …, 12
%y
Рік як двозначне число
00, 01, …, 99
%Y
Рік як чотиризначне число
0001, 0002, …, 2013, 2014, …, 9998, 9999
%H
Година (24-годинний формат) як двозначне число з доповненням нулями зліва
00, 01, …, 23
%I
Година (12-годинний формат) як двозначне число з доповненням нулями зліва
01, 02, …, 12
%p
Позначення AM або PM
AM, PM (en_US);am, pm (de_DE)
%M
Хвилини як двозначне число з доповненням нулями зліва
00, 01, …, 59
%S
Секунди як двозначне число з доповненням нулями зліва
00, 01, …, 59
%f
Мікросекунди як шестизначне число з доповненням нулями зліва
000000, 000001, …, 999999
%z
Зсув UTC у форматі ±HHMM[SS[.ffffff]] (порожній рядок, якщо об’єкт naive).
(порожньо), +0000, -0400, +1030, +063415, -030712.345216
%Z
Назва часового поясу (порожній рядок, якщо об’єкт naive).
(порожньо), UTC, GMT
%j
День року як трицифрове число з доповненням нулями зліва
001, 002, …, 366
%U
Номер тижня року (де неділя є першим днем тижня) як десяткове число з доповненням нулями зліва. Усі дні нового року до першої неділі вважаються нульовим тижнем.
00, 01, …, 53
%W
Номер тижня року (де понеділок є першим днем тижня) як десяткове число. Усі дні нового року до першого понеділка вважаються нульовим тижнем.
00, 01, …, 53
%%
Символ '%'
%
%s
timestamp
1607926200
Усі інші символи відображаються як є.
Ви можете отримати поточний timestamp за допомогою: convert_datetime("#{current_date} #{current_time}", "%d.%m.%Y %H:%M", "%s")
Показати поточну дату у форматі "дд назва місяця"
Приклад
Щоб відобразити дату у форматі "дд назва місяця", використовуйте функцію current_date_eng().
Якщо вам потрібно додати до цієї дати певну кількість днів, слід вказати потрібну кількість днів як параметр у функції.
Наприклад, якщо сьогодні 3 квітня, тоді функція поверне:
current_date_eng() - 3 квітня
current_date_eng(2) - 5 квітня
current_date_eng(-2) - 1 квітня
Last updated
