Для работы с датами и временем
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)
'дата' + дни прибавляет к дате указанное количество дней
'время' + минуты прибавляет к дате указанное количество минут
Как сравнить время
Сравнивать даты и время можно логическими операторами так же, как и числа: больше >, меньше < равно ==, не равно != больше или равно >=, меньше или равно <=
При этом условия сравнения можно связывать между собой логическими операциями и AND, или OR
Условие сравнения должно быть логически верным, т.е. нельзя строить условия по типу a == 1 and a != 1, так как число не может быть одновременно равно и не равно 1.
Записываются условия сравнения в поле Переменная для сравнения
При указании условий сравнения в стрелке обязательно используйте задержки
Как задать временные интервалы
Очень удобная функция, позволяющая работать с временными интервалами, это:
time_interval('Время_начало','Время_конец')
Результат выполнения функции логическое True или False
Используйте функцию в блоках как условие в Переменной для сравнения или в Калькуляторе в IF()
Функция позволяет проверить вхождение текущего времени в заданный интервал
Как узнать сколько времени осталось до дня 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
И выводим время в поле Текст сообщения:
До старта осталось #{дней} дней #{часов} часов #{минут} минут и #{секунд} секунд
Код для вставки в калькулятор:
Так же калькулятор поддерживает вычитание даты и времени без приведения типов. Например:
'11.12.2021' - '8.12.2021' вернет 3 (дня)
'11:12' - '3:45' вернет 447 (минут)
Как узнать ближайший День рождения
Для того, чтобы бот мог поздравить человека можно использовать функцию
birthdate(дата) - она возвращает ближайший день рождения. На вход принимает дату рождения человека. Например: напоминание = birthdate('28.04.1994')
Как получить дату дня недели
Если у вас периодичные рассылки по дням недели, вы можете получать дату дня недели, чтобы запланировать рассылку.
weekday_date(weekday, b) - возвращает дату ближайшего дня недели. Принимает два параметра. Первый параметр день недели, дату которого необходимо определить (от 1 до 7). Второй параметр показывает, возвращать ли сегодняшнюю дату, если нужный день сегодня. Второй параметр можно не указывать, по умолчанию 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
get_datetime(format) - функция получения текущего времени в определенном формате. Функция принимает 1 параметр, а именно указание в каком формате вернуть время. Важно: Ответ от функции придет на русском языке, если проект создан на salebot.pro, если же вы работаете в проекте на salebot.ai, то ответ придет на английском языке (Monday, Tuesday...) Пример:
get_datetime("%A") на выходе будет Среда
Описание параметров строки формата, параметры указываются в функции в кавычках:
Директива | Значение | Пример |
| Сокращенное значение дня недели | Вс, Пн.. |
| Полное название дня недели | Понедельник, Вторник, …, Воскресенье |
| День недели как десятичное число, где 0 воскресенье и 6 суббота | 0, 1, …, 6 |
| День месяца в виде десятичного числа с нулями | 01, 02, …, 31 |
| Месяц как аббревиатура | янв, фев, …, дек |
| Полное название месяца | января, февраля, марта и пр... |
| Месяц в виде десятичного числа с нулями | 01, 02, …, 12 |
| Год в виде двузначного числа | 00, 01, …, 99 |
| Четырехзначное значение года | 0001, 0002, …, 2013, 2014, …, 9998, 9999 |
| Час (24-часовой формат) двузначное значение | 00, 01, …, 23 |
| Час (12-часовой формат) двузначное значение | 01, 02, …, 12 |
| Эквивалент AM или PM. | AM, PM (en_US);am, pm (de_DE) |
| Минуты в двузначном формате | 00, 01, …, 59 |
| Секунды в двузначном формате | 00, 01, …, 59 |
| Микросекунды в шестизна | 000000, 000001, …, 999999 |
| UTC offset in the form | (empty), +0000, -0400, +1030, +063415, -030712.345216 |
| Time zone name (empty string if the object is naive). | (empty), UTC, GMT |
| Трезначное значение дня года | 001, 002, …, 366 |
| Номер недели в году (воскресенье как первый день недели) в виде десятичного числа, дополненного нулями. Все дни нового года, предшествующие первому воскресенью, считаются нулевой неделей. | 00, 01, …, 53 |
| Номер недели в году (понедельник как первый день недели) в виде десятичного числа. Все дни нового года, предшествующие первому понедельнику, считаются нулевой неделей. | 00, 01, …, 53 |
| Символ | % |
| timestamp | 1607926200 |
Все остальные символы означают сами себя.
Получить текущий 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 июля
Видеогид
Last updated