Работа с датами и временем

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

salebot работает с датами в формате "dd.mm.yyyy", а с временем в формате "HH:MM" Время московское!

Переменные

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

#{current_date} - текущая дата в формате dd.mm.yyyy #{next_day} - завтрашняя дата в формате dd.mm.yyyy. Удобно для отправки сообщения завтра. #{current_time} - московское время в формате hh:mm #{weekday} - день недели в виде числа, понедельник - 1, вторник -2

Операции

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

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

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

Либо вы можете напрямую прибавлять дни к датам и минуты ко времени.

'20.08.2019' -99 current_date + 20 current_time + 20 '20:08' -30

Сравнение

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

Примеры: '01.09.2020' < '11.10.2020' '11.10.2020' >= current_date '09:00' < '11:50' '09:00' == '11:50' '11:50' > current_time

Получение даты дня недели

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

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

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

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

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

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

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

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

Описание параметров строки формата:

Директива

Значение

Пример

%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")

Видеоурок