Salebot.pro
Search…
Работа с датами и временем
Вы можете использовать сравнение дат и времени, например, для попадания в рабочее время
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)
Либо вы можете напрямую прибавлять дни к датам и минуты ко времени.
Пример:
'12.10.2021' + 3
'15:00' + 120
current_date + 2
current_time + 30

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

Сравнивать даты и время можно логическими операторами, так же как и числа.
Примеры: '01.09.2020' < '11.10.2020'
'11.10.2020' >= current_date
current_date == date
current_time >= '18:00'
current_time <= '21:00'

Как задать временные интервалы

Чтобы не использовать сложные конструкции, как на предыдущем скриншоте, для выполнения условия вы можете указывать временной интервал с помощью функции:
результат = timeinterval('Время_начало','Время_конец')
где результат это True (условие выполнено) или False (условие не выполнено)
Примеры:
time_interval('10:00','19:00') - проверка временного интервала с 10 утра до 7 вечера
time_interval('19:00','8:00') - проверка временного интервала с 7 вечера до 8 утра
time_interval('18.10.2021 10:00','25.10.2021 23:59:59') - проверка временного интервала между разными датами
time_interval('#{current_date} 10:00','#{date} 19:00') - проверка временного интервала, заданного с помощью переменных
Тогда у вас условие будет выполняться в заданных временных рамках.
Также это вы можете использовать в конструкциях с оператором if в поле "Калькулятор"
Пример: Если пользователь напишет слово "время" в период с 10 утра до 7 вечера, ему придет ответ "Вам скоро ответит менеджер", в другое время он получит в ответ "Сейчас менеджер не на месте, вам ответят в рабочее время с 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
Подсчет сколько дней до заявленной даты (21.12.2021)
Подсчет сколько минут до заданного времени заданной даты 15:00 16.12.2021
Так же калькулятор поддерживает вычитание даты и времени без приведения типов. Например:
'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. 1 параметр: в каком формате вернуть время. Пример:
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 апреля

Видеоурок

Copy link
On this page
Переменные
Как прибавить ко времени время
Как сравнить время
Как задать временные интервалы
Как узнать сколько времени осталось до дня D
Как узнать ближайший День рождения
Как получить дату дня недели
Как получить дату дня месяца
Как проверить попадание в рабочее или нерабочее время
Как конвертировать дату и время
Вывод даты в виде «dd название месяца»
Видеоурок