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

для дат -"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(дата,лет_прибавить) - для вычисления даты через сложение с учетом високосного года заданной даты и количества лет. Для вычитания используйте отрицательное число.

addMonth(дата, месяцев_прибавить) - для вычисления даты через сложение с учетом високосного года заданной даты и количества месяцев. Для вычитания используйте отрицательное число.

addDays(дата, дней_прибавить) - для прибавления к дате указанного количества дней. Для вычитания передайте отрицательное число. Пример: addDays(current_date, 20) или addDays('20.08.2019', -99)

addMinutes(время, минут_прибавить) прибавляет к указанному времени количество минут. Для вычитания передайте отрицательное число. Пример: addMinutes(current_time, 20) или addMinutes('20:08', -30)

'дата' + дни прибавляет к дате указанное количество дней

'время' + минуты прибавляет к дате указанное количество минут

Примеры

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

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

Пример использования простого математического действия - сложения даты и дней, времени и минут:

Пример кода для копирования

kol = 2 
data = '29.02.2020' 
x = addYear(data, kol) 
y = addYear('31.12.2021', -1*kol)


kol = 10 
data = '30.04.2019' 
x = addMonth(data, kol) 
y = addMonth('31.12.2020', -1*kol)

kol = 10 
data = '30.04.2019' 
x = addMonth(data, kol) 
y = addMonth('31.12.2020', -1*kol)

Как сравнить время

Описание

Сравнивать даты и время можно логическими операторами так же, как и числа:
больше >, меньше <
равно ==, не равно !=
больше или равно >=, меньше или равно <=

При этом условия сравнения можно связывать между собой логическими операциями и AND, или OR

Условие сравнения должно быть логически верным, т.е. нельзя строить условия по типу a == 1 and 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('Время_начало','Время_конец')

Результат выполнения функции логическое True или False

Используйте функцию в блоках как условие в Переменной для сравнения или в Калькуляторе в IF()

Функция позволяет проверить вхождение текущего времени в заданный интервал

Пример

time_interval('10:00','19:00') - проверка временного интервала с 10 утра до 7 вечера

time_interval('19:00','07:00') - проверка временного интервала с 7 вечера до 7 утра

time_interval('18.10.2021 10:00','25.10.2021 23:59:59') - проверка временного интервала между разными датами

time_interval('#{current_date} 10:00','#{date} 19:00') - проверка временного интервала, заданного с помощью переменных

Разберем подробнее первый пример, дословно функция читается:

Если пользователь напишет слово "время" в период с 10 утра до 7 вечера, то условие истинно, иначе ложь.

Таким образом, можно реализовать разные ответы в зависимости от времени обращения клиента. Например, при попадании во временной интервал с 10 утра до 7 вечера клиент получит ответ "Вам скоро ответит менеджер", в другое время он получит в ответ "Сейчас менеджер не на месте, вам ответят в рабочее время с 10:00"

Запишем в поле "Калькулятор":

ответ = if(time_interval('10:00','19:00'), "Вам скоро ответит менеджер", "Сейчас менеджер не на месте, вам ответят в рабочее время с 10:00")

а в поле Сообщение - #{ответ}

Пример кода для копирования

ответ = 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

Делим на количество секунд в сутках, и округляем полученное значение:

суток = time/86400

дней = int(#{суток})

Выясняем сколько секунд осталось от неполных суток:

c = дней*86400

d = time - c

Считаем сколько это в часах и округляем:

e = d/3600 часов = int(e)

Выясняем сколько секунд осталось от неполных часов:

g = часов*3600

h = d - g

Переводим это в минуты и округляем:

i = h/60

минут = int(i)

Выясняем сколько секунд осталось:

k = минут*60

секунд = h - k

И выводим время в поле Текст сообщения:

До старта осталось #{дней} дней #{часов} часов #{минут} минут и #{секунд} секунд

Код для вставки в калькулятор:

timestampD = convert_datetime("#{date_D} #{time_D}", "%d.%m.%Y %H:%M", "%s")
timestamp0 = #{timestamp}
timeD = int(#{timestampD})
time0 = int(#{timestamp0})
time = timeD - time0
суток = time/86400
дней = int(#{суток})
c = дней*86400
d = time - c
e = d/3600
часов = int(e)
g = часов*3600 
h = d - g
i = h/60 
минут = int(i)
k = минут*60 
секунд = h - k

Так же калькулятор поддерживает вычитание даты и времени без приведения типов. Например:

'11.12.2021' - '8.12.2021' вернет 3 (дня)

'11:12' - '3:45' вернет 447 (минут)

Как узнать ближайший День рождения

Для того, чтобы бот мог поздравить человека, можно использовать функцию:

birthdate(дата) - функция возвращает ближайший день рождения. На вход принимает дату рождения человека. Например: напоминание = birthdate('28.04.1994')

Как получить дату дня недели

Если у вас периодичные рассылки по дням недели, вы можете получать дату дня недели, чтобы запланировать рассылку.

weekday_date(weekday, b) - возвращает дату ближайшего дня недели.

Принимает два параметра.
weekday — день недели, дату которого необходимо определить (от 1 до 7).
b — параметр, который показывает, возвращать ли сегодняшнюю дату, если нужный день сегодня. Второй параметр можно не указывать, по умолчанию False. Его значение давайте рассмотрим на примере:

Допустим, вы настраиваете отправку сообщения в рассылке так, чтобы оно приходило именно в четверг. Но как же быть, если клиент только зарегистрировался в четверг?
Отправлять ему сообщение в этот четверг или в следующий?
Второй параметр False означает, что сообщение будет отправлено только в следующий четверг.
Второй параметр True означает, что оно будет отправлено и в тот четверг, когда пользователь только зарегистрировался.

В нашем примере пользователь регистрируется в четверг 13.02.2020. И сообщение мы ему хотим отправить в следующий четверг. Значит, возвращаемое значение: "20.02.2020".

Например, weekday_date(4) вернет '20.02.2020'.

Если текущий день вам подходит только до определенного времени, то можно использовать такую конструкцию:
weekday_date(4, current_time < '13:00'), где условие можно заменить на нужное вам.

Вариант использования функции:

Как получить дату дня месяца

Если у вас периодичные действия в определенный день месяца, вы можете получать дату для ближайшего дня месяца, чтобы запланировать рассылку.

month_date(date, b) - возвращает ближайшую дату месяца на указанное в параметре число дня. Принимает два параметра. Первый параметр date - число дня, для которого необходимо определить ближайшую дату (от 1 до 31). Второй параметр b показывает, возвращать ли сегодняшнюю дату, если нужный день сегодня. Второй параметр можно не указывать, по умолчанию False.

Если передать число 31, а в текущем месяце 30 дней, то функция вернет дату на 30 число.

Например, если сегодня 5.04.2022, а мы вызываем функцию t=month_date(1), то в результате получим дату 01.05.2022.

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

Допустим, компания работает с утра 9 до 6 вечера за исключением субботы и воскресенья.

Все рекомендуется делать по шагам.

Сначала поставим проверку попадания в рабочее время:
current_time >= '9:00' AND current_time <= '18:00'
По аналогии НЕ рабочее время:
current_time < '9:00' OR current_time > '18:00'

Дальше добавим проверку не написали ли нам в выходные, для этого нам понадобится weekday:
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

Пример

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

Формат даты времени везде используется разный и, возможно, один из интегрированных ресурсов вернет время не в том формате, который понимает salebot. Вам нужно будет его конвертировать.

convert_datetime(date, fin, f_out) - для конвертации даты и времени

3 параметра: строка даты, строка формата входной строки, строка формата результата. Пример:
convert_datetime("2011-11-03", "%Y-%m-%d", "%Y/%m/%d") на выходе будет 2011/11/03

Данная функция конвертирует поступившую дату в timestamp.

#{current_date} #{current_time} - преобразовывается в "06.01.2025 11:45" - поскольку здесь нет информации о секундах и микросекундах, в результате после точки одни нули.

Пример: 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) - функция получения текущего времени в определенном формате. Функция принимает 1 параметр, а именно указание в каком формате вернуть время.

Важно: Ответ от функции придет на русском языке, если проект создан на salebot.pro, если же вы работаете в проекте на salebot.ai, то ответ придет на английском языке (Monday, Tuesday...)

Пример:

get_datetime("%A") на выходе будет Среда

Описание параметров строки формата, параметры указываются в функции в кавычках:

Все остальные символы означают сами себя.

Получить текущий timestamp можно: convert_datetime("#{current_date} #{current_time}", "%d.%m.%Y %H:%M", "%s")

Вывод текущей даты в виде «dd название месяца»

Чтобы вывести дату в виде "dd название месяца", воспользуйтесь функцией current_date_rus(). Она выведет сегодняшнюю дату в виде числа и названия месяца в родительном падеже, например, 3 апреля.

Если Вам потребуется прибавить определенное количество дней к данной дате, следует вписать нужное количество дней в параметры функции.

Например, если сегодняшняя дата - 3 апреля, тогда функция вернет:
current_date_rus() - 3 апреля
current_date_rus(2) - 5 апреля
current_date_rus(-2) - 1 апреля

Вывод заданной даты в виде «dd название месяца»

Для вывода заданной даты в виде «dd название месяца» используйте функцию
date_rus(date, num), где
date - это дата в формате dd.mm.yyyy,которую необходимо перевести в вид 26 октября, например, 26.10.2022;
num - количество дней, которые нужно отнять/прибавить.

Например, для даты 19.07.2022 функция вернет:
date_rus(‘19.07.2022’) - 19 июля
date_rus(‘19.07.2022’,2) - 21 июля
date_rus(‘19.07.2022’,-2) - 17 июля

Видеогид

https://youtu.be/FXeeRkv_mdk