Salebot.pro
Search…
⌃K

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

Вы можете использовать сравнение дат и времени, например, для попадания в рабочее время
Для упрощения понимания какой набор функций доступен на тарифе вводим систему обозначений:
Доступно на Бесплатном тарифе
- доступно на Бесплатном тарифе
Доступно на Базовом тарифе
- доступно на Базовом тарифе
Доступно на тарифе Стандарт
- доступно на тарифе Стандарт
Доступно на трифе Премиум
- доступно на тарифе Премиум
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','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') - проверка временного интервала, заданного с помощью переменных
Разберем подроебнее первый пример, дословно функция читается:
Если пользователь напишет слово "время" в период с 10 утра до 7 вечера, то условие истинно, иначе ложь.
Таким образом, можно реализовать разные ответы в зависимости от времени обращения клиента. Например, при попадании во временной интервал с 10 утра до 7 вечера клиент получит ответ "Вам скоро ответит менеджер", в другое время он получит в ответ "Сейчас менеджер не на месте, вам ответят в рабочее время с 10:00"
Запишем в поле "Калькулятор":
ответ = if(time_interval('10:00','19:00'), "Вам скоро ответит менеджер", "Сейчас менеджер не на месте, вам ответят в рабочее время с 10:00")
а в поле Сообщение - #{ответ}
Настройка блока на типовой автоответчик
Тестируем функцию timeinterval()
ответ = 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 апреля

Вывод заданной даты в виде «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 июля

Видеоурок