MaviBot работает со следующими форматами ДАТЫ и ВРЕМЕНИ:

для дат – "дд.мм.гггг"

для времени – "ЧЧ:ММ"

Переменные

Для работы с датами и временем вы можете использовать следующие переменные:

current_date - текущая дата в формате дд.мм.гггг, основанная на часовом поясе проекта
next_day - завтрашняя дата в формате дд.мм.гггг; полезна для планирования сообщений
current_time - текущее время в формате чч:мм, основанное на часовом поясе проекта
weekday - день недели в виде числа: Понедельник = 1, Вторник = 2 и т.д.

Быстрый доступ к описаниям функций:

Как добавить время ко времени

Вы можете сравнивать даты и время с помощью логических операторов, как числа.

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 и закрыта по субботам и воскресеньям. Давайте построим проверки шаг за шагом:

  1. Проверьте, находится ли время в рабочее время: current_time >= '9:00' И current_time <= '18:00'
  2. Проверьте, находится ли время вне рабочего времени: current_time < '9:00' ИЛИ current_time > '18:00'
  3. Проверьте, является ли сегодня рабочим днем (не суббота и не воскресенье): weekday != 6 И weekday != 7
  4. Объедините условия для написания в рабочее время: current_time >= '9:00' И current_time <= '18:00' И weekday != 6 И weekday != 7
  5. Объедините условия для написания вне рабочего времени: 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