MaviBot работает со следующими форматами ДАТЫ и ВРЕМЕНИ:
для дат – "дд.мм.гггг"
для времени – "ЧЧ:ММ"
Переменные
Для работы с датами и временем вы можете использовать следующие переменные:
current_date - текущая дата в формате дд.мм.гггг, основанная на часовом поясе проекта
next_day - завтрашняя дата в формате дд.мм.гггг; полезна для планирования сообщений
current_time - текущее время в формате чч:мм, основанное на часовом поясе проекта
weekday - день недели в виде числа: Понедельник = 1, Вторник = 2 и т.д.
Быстрый доступ к описаниям функций:
- Добавить время ко времени
- Сравнить время
- Установить временные интервалы
- Рассчитать время до дня D
- Найти следующий день рождения
- Получить дату определенного дня недели
- Получить дату определенного дня месяца
- Проверить, находится ли время в рабочее время
Как добавить время ко времени
Вы можете сравнивать даты и время с помощью логических операторов, как числа.
addYear() | addMonth() | addDays() | addMinutes()
addYear(дата, количество_лет_для_добавления) - вычисляет новую дату, добавляя указанное количество лет к заданной дате, учитывая високосные годы. Используйте отрицательное число для вычитания лет.
addMonth(дата, количество_месяцев_для_добавления) - вычисляет новую дату, добавляя указанное количество месяцев к заданной дате, учитывая високосные годы. Используйте отрицательное число для вычитания месяцев.
addDays(дата, количество_дней_для_добавления) - добавляет указанное количество дней к дате. Используйте отрицательное число для вычитания дней. Пример: addDays(current_date, 20) или addDays('20.08.2019', -99)
addMinutes(время, количество_минут_для_добавления) - добавляет указанное количество минут ко времени. Используйте отрицательное число для вычитания минут. Пример: addMinutes(current_time, 20) или addMinutes('20:08', -30)
'дата' + дни - добавляет указанное количество дней к дате
'время' + минуты - добавляет указанное количество минут ко времени
Пример добавления определенного количества лет к дате:


Пример добавления определенного количества месяцев к дате:


Пример использования простой математической операции — добавления дней к дате и минут ко времени:


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)
Как сравнить время
Вы можете сравнивать даты и время с помощью логических операторов, как числа:
больше > , меньше <
равно == , не равно !=
больше или равно >= , меньше или равно <=
Условия сравнения также можно комбинировать с помощью логических операторов И и ИЛИ.
Условия сравнения должны быть логически непротиворечивыми, то есть вы не можете создавать условия типа 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('время_начала', 'время_окончания')
Функция возвращает логическое Истина или Ложь.
Используйте эту функцию в блоках как условие в поле "Переменная для сравнения" или внутри калькулятора с помощью 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') - проверяет временной интервал, заданный с помощью переменных
Давайте подробнее рассмотрим первый пример. Функция читается следующим образом:
Если пользователь отправляет сообщение, содержащее слово "время", в период с 10:00 до 19:00, условие возвращает истину; в противном случае возвращается ложь.
Это позволяет создавать разные ответы в зависимости от времени запроса клиента.
Например, если текущее время находится между 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")
Как узнать, сколько времени осталось до дня 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} секунд
Вот код для вставки в поле "Калькулятор":
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(дата) - возвращает следующий предстоящий день рождения на основе даты рождения человека: reminder = birthdate('28.04.1994')
Как получить дату определенного дня недели
Если у вас есть повторяющиеся рассылки в определенные дни недели, вы можете получить дату дня недели, чтобы запланировать рассылку.
weekday_date(день_недели, 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(дата, b) - возвращает ближайшую дату месяца для указанного номера дня. Принимает два параметра:
дата - номер дня месяца для поиска (от 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' И current_time <= '18:00'
- Проверьте, находится ли время вне рабочего времени: current_time < '9:00' ИЛИ current_time > '18:00'
- Проверьте, является ли сегодня рабочим днем (не суббота и не воскресенье): weekday != 6 И weekday != 7
- Объедините условия для написания в рабочее время: current_time >= '9:00' И current_time <= '18:00' И weekday != 6 И weekday != 7
- Объедините условия для написания вне рабочего времени: current_time < '9:00' ИЛИ current_time > '18:00' ИЛИ weekday == 6 ИЛИ weekday == 7

Как преобразовать дату и время
Формат даты и времени, используемый в разных системах, различается, и возможно, что один из интегрированных ресурсов вернет время в формате, который MaviBot не распознает. Вам нужно будет преобразовать его.
convert_datetime(дата, 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(формат) - функция для получения текущего времени в определенном формате.
Функция принимает один параметр — строку, которая указывает желаемый выходной формат.
Важно! Ответ функции будет (Понедельник, Вторник и т.д.).
Пример: 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


