Для работы с датами и временем

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

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

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

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

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) - возвращает дату ближайшего дня недели. Принимает два параметра. Первый параметр день недели, дату которого необходимо определить (от 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") на выходе будет Среда

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

Директива

Значение

Пример

%a

Сокращенное значение дня недели

Вс, Пн..

%A

Полное название дня недели

Понедельник, Вторник, …, Воскресенье

%w

День недели как десятичное число, где 0 воскресенье и 6 суббота

0, 1, …, 6

%d

День месяца в виде десятичного числа с нулями

01, 02, …, 31

%b

Месяц как аббревиатура

янв, фев, …, дек

%B

Полное название месяца

января, февраля, марта и пр...

%m

Месяц в виде десятичного числа с нулями

01, 02, …, 12

%y

Год в виде двузначного числа

00, 01, …, 99

%Y

Четырехзначное значение года

0001, 0002, …, 2013, 2014, …, 9998, 9999

%H

Час (24-часовой формат) двузначное значение

00, 01, …, 23

%I

Час (12-часовой формат) двузначное значение

01, 02, …, 12

%p

Эквивалент AM или PM.

AM, PM (en_US);am, pm (de_DE)

%M

Минуты в двузначном формате

00, 01, …, 59

%S

Секунды в двузначном формате

00, 01, …, 59

%f

Микросекунды в шестизна

000000, 000001, …, 999999

%z

UTC offset in the form ±HHMM[SS[.ffffff]] (empty string if the object is naive).

(empty), +0000, -0400, +1030, +063415, -030712.345216

%Z

Time zone name (empty string if the object is naive).

(empty), UTC, GMT

%j

Трезначное значение дня года

001, 002, …, 366

%U

Номер недели в году (воскресенье как первый день недели) в виде десятичного числа, дополненного нулями. Все дни нового года, предшествующие первому воскресенью, считаются нулевой неделей.

00, 01, …, 53

%W

Номер недели в году (понедельник как первый день недели) в виде десятичного числа. Все дни нового года, предшествующие первому понедельнику, считаются нулевой неделей.

00, 01, …, 53

%%

Символ '%'

%

%s

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