MaviBot працює з наступними форматами ДАТИ та ЧАСУ:
для дат – "дд.мм.рррр"
для часу – "ГГ:ХХ"
Змінні
Для роботи з датами та часом ви можете використовувати наступні змінні:
current_date - поточна дата у форматі дд.мм.рррр, на основі часового поясу проекту
next_day - дата завтрашнього дня у форматі дд.мм.рррр; корисна для планування повідомлень
current_time - поточний час у форматі гг:хх, на основі часового поясу проекту
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 і не дорівнювати 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.
Використовуйте цю функцію в блоках як умову в полі "Змінна для порівняння" або в калькуляторі за допомогою 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")
У полі "Повідомлення" введіть: #{response}


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

Щоб розрахувати, скільки часу залишилося до дня Д:
Визначте дату та час цільового моменту, до якого ви хочете вести зворотний відлік.
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} секунд
Ось код для вставки в поле "Калькулятор":
timestampD = convert_datetime("#{date_D} #{time_D}", "%d.%m.%Y %H:%M", "%s")
timestamp0 = #{timestamp}
timeD = int(#{timestampD})
time0 = int(#{timestamp0})
time = timeD - time0
full_days = time/86400
days = int(#{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

Калькулятор також підтримує віднімання дат та часу без перетворення типів. Наприклад:
'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'), де умову можна замінити на будь-яку необхідну вам умову.
Ось приклад використання функції:
Приклад використання функції в полі "Дата надсилання" з'єднання

Як отримати дату конкретного дня місяця
Якщо у вас є повторювані дії в певний день місяця, ви можете отримати дату найближчого такого дня, щоб запланувати розсилку.
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) - функція для отримання поточного часу в певному форматі.
Функція приймає один параметр — рядок, який визначає бажаний вихідний формат.
Важливо! Відповідь функції буде (Понеділок, Вівторок тощо).
Приклад: get_datetime("%A") на виході буде Wednesday
Опис параметрів рядка формату, які вказуються у функції як рядки в лапках:
Всі інші символи представляють самі себе.
Ви можете отримати поточний timestamp за допомогою: convert_datetime("#{current_date} #{current_time}", "%d.%m.%Y %H:%M", "%s")
Відображення поточної дати у форматі "дд назва місяця"
Щоб відобразити дату у форматі "дд назва місяця", використовуйте функцію current_date_eng().
Якщо вам потрібно додати певну кількість днів до цієї дати, ви повинні вказати необхідну кількість днів як параметр у функції.
Наприклад, якщо сьогодні 3 квітня, то функція поверне:
current_date_eng() - April 3rd
current_date_eng(2) - April 5th
current_date_eng(-2) - April 1st


