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

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

Чтобы преобразовать текущую дату, можно воспользоваться хелпером:

{{formatDate (now) "DD.MM.YYYY" "ru"}}

Также существует хелпер для преобразования даты, введенной пользователем:

{{formatDate Date1 "DD.MM.YYYY" "ru"}}

Где Date1 — это переменная, куда записалась дата, которую прислал пользователь.

В боте это можно реализовать таким образом:

Прибавить к текущей дате один день можно с помощью хелпера:

{{addDate (formatDate now "DD.MM.YYYY HH:mm:ss" "RU") 1 "days" "DD.MM.YYYY HH:mm:ss"}}

Можно поменять 1 на нужное количество дней, которые прибавляются:

{{addDate (formatDate now "DD.MM.YYYY HH:mm:ss" "RU") 15 "days" "DD.MM.YYYY HH:mm:ss"}}

Если поменять "days" на "months" — прибавятся месяцы:

{{addDate (formatDate now "DD.MM.YYYY HH:mm:ss" "RU") 1 "months" "DD.MM.YYYY HH:mm:ss"}}

"weeks" — недели:

{{addDate (formatDate now "DD.MM.YYYY HH:mm:ss" "RU") 1 "weeks" "DD.MM.YYYY HH:mm:ss"}}

"years" — года:

{{addDate (formatDate now "DD.MM.YYYY HH:mm:ss" "RU") 1 "years" "DD.MM.YYYY HH:mm:ss"}}

"quarters" — кварталы:

{{addDate (formatDate now "DD.MM.YYYY HH:mm:ss" "RU") 1 "quarters" "DD.MM.YYYY HH:mm:ss"}}

"hours" — часы:

{{addDate (formatDate now "DD.MM.YYYY HH:mm:ss" "RU") 2 "hours" "DD.MM.YYYY HH:mm:ss"}}

"minutes" — минуты:

{{addDate (formatDate now "DD.MM.YYYY HH:mm:ss" "RU") 2 "minutes" "DD.MM.YYYY HH:mm:ss"}}

"seconds" — секунды:

{{addDate (formatDate now "DD.MM.YYYY HH:mm:ss" "RU") 2 "seconds" "DD.MM.YYYY HH:mm:ss"}}

Эти и другие варианты можно протестировать в песочнице:

Хелпер для вывода в бот месяца в виде слова

Обычно месяц в дате выводится в формате числа, но если нужно название месяца, можно использовать хелпер:

{{formatDate (now) "MMM" "ru"}}

Таким образом месяц выведется с большой буквы:

{{capitalize (formatDate (now) "MMM" "ru")}}

Как вывести день недели

День недели в виде порядкового номера можно вывести с помощью хелпера:

{{formatDate now "d" "ru"}}

В этом формате дни будут считаться от 0 до 6, где 0 — это воскресенье, 1 — понедельник и т.д.

Выводить дни недели в формате «пн», «вт» и т.д. поможет хелпер:

{{formatDate now "dd" "ru"}}

Так можно выводить дни недели полностью («понедельник», «вторник», и т. д.):

{{formatDate now "dddd" "ru"}}

Если хелпере заменить "ru" на "en", то названия дней недели будут выводиться на английском:

{{formatDate now "dddd" "en"}}

Дата будет преобразовываться в зависимости от того, в какой день недели зашел пользователь.

Информацию по другим видам форматирования даты можно взять отсюда

Как настроить ответ бота в зависимости от времени входа пользователя

Получаем и преобразовываем в нужный формат текущее время

Текущую дату и время мы можем получать с помощью хелпера:

 {{formatDate (now) "DD.MM.YYYY HH:mm" "ru"}}

Записываем компонентом Запись переменной значение в переменную Time. Поскольку нас интересует только время, в которое пришел пользователь в бота, то нужно удалить из хелпера дату и оставить только часы и минуты:

{{formatDate (now) "HH:mm" "ru"}}

Обрабатываем время и переводим на заданные экраны

Ставим на экран компонент Развилка. В поле Имя переменной, откуда развилка возьмёт значение указываем Time.

Регулярное выражение проще составить для первого интервала — с 10 до 19:
^1[0-8]\:[0-5][0-9]$

Добавляем это регулярное выражение в значение цели Развилки. Выбираем Регулярное выражение в Типе данных. Цель по умолчанию — перевод в интервал с 19 до 10.

Оформляем экраны с ответами бота. Готово.

Как вывести порядковый номер недели в году

{{formatDate now 'w' 'ru'}}

Как сравнить даты между собой

Сделаем так, чтобы пользователю написавшему менее чем через 15 дней после покупки пришло сообщение с одним текстом, а тому, кто написал позже 15-дневного срока — с другим.

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

1. Спросим у пользователя, когда он совершил последнюю покупку.

2. Запишем ответ в переменную Usday с помощью Ввода от пользователя. Выберем тип данных Дата.

3. Переведем сегодняшнюю дату в секунды с помощью хелпера

{{now}}

4. Переведем в миллисекунды дату, в которую была совершена последняя покупка, используя другой хелпер:

{{formatDate Usday 'x' 'ru'}}

Таким образом перезапишем переменную Usday.

5. Вычтем из сегодняшнего дня дату, в которую была сделана последняя покупка:

{{subtract today Usday}}

Запишем результат вычитания в переменную diff

6. С помощью хелпера для сравнения gt определим прошло больше 15 дней или меньше:

{{#gt (toInt diff) 1296000000}}Больше 15 дней{{else}}Меньше 15 дней{{/gt}}

7. Проверим переменную days развилкой и направим пользователей на разные экраны в зависимости от того, сколько прошло времени.

8. Оформим отдельные экраны для тех кто написал позже чем через 15 дней и тем кто раньше.

В начало ↑

Была ли статья полезна?

Да Нет