QNext. Макрос date
!{date} - макрос позволяющий вставить в текст дату.
Пример:
!{date|
when: now;
format: dd.mm HH:MM:ss
}
Результат: 14.02 01:31:30
Макрос может принимать следующие параметры:
when
Парам when указывает какую дату отобразить: сейчас, завтра, определенная дата... В зависимости от значения when, макрос может принимать различные дополнительные параметры. Значения параметры when могут быть следующими:
when: now
Текущая дата, значение по умолчанию, можно не писать:
!{date| when: now;}
when: tomorrow
Завтра от текущей даты в это же время, т.е. по сути +24ч:
!{date| when: tomorrow;}
when: yesterday
Вчера от текущей даты в это же время (-24ч):
!{date| when: yesterday;}
when: nextWeekday
Ближайший выходной:
!{date| when: nextWeekday;}
when: value
Взятие даты из переменной триггера. Например такой макрос покажет дату когда юзер проголосовал:
!{date|
when: value;
path: vote.value.createdAt;
}
В переменной path вы можете указать путь до переменной, где лежит дата. В этой переменной дата может быть в числовом формате (unixtimestamp в секундах) или сразу объект Date (javascript).
shift
С помощью параметр shift можно задать любое смещение от выбранной даты. Например выбираете текущую дату указав when: now, а затем указываете смещение от этой даты. Следущий макрос покажет текущую дату +1 день, 3 часа и 20 минут:
!{date|
when: now;
shift: +1d +3h +20m;
}
Доступны следующие форматы смещения:
- y - год
- mm - месяц
- d - день
- h - час
- m - минута
- s - секунда
Здесь важно перед числом указать как именно будем смещаться:
+(плюс) означает смещение в будущее на указанное значение-(минус) означает смещение в прошлое на указанное значение=(равно) - в этом случае не будет смещения, а произойдет замена значения на указанное. Например если вы хотите указать завтрашний день, но определенное время, допустим 10 утра, тогда можно написать так:
!{date|
when: tomorrow;
shift: =10h =0m =0s;
}
format
Параметр формат служит для форматирования вывода даты, например если вы хотите показать полную дату ГГГГ.ММ.ДД без времени:
!{date|
format: yyyy.mm.dd;
}
А если надо показать только время:
!{date|
format: hh:MM:ss;
}
Как видите в строке форматирования мы указываем спец символы, которые потом заменяются получившимися значениями. Можно использовать следующие спец символы:
- d - дата(день)
- dd - день с добавление нуля в начало если меньше 10
- ddd - день недели на английском, сокращенно
- dddd - день недели на английском, полностью
- m - номер месяца
- mm - номер месяца с добавлением нуля в начало
- mmm - название месяца на английском, сокращенно
- mmmm - название месяца на английском, полностью
- yy - год сокращенно
- yyyy - год полностью
- h - часы в 12-часовом формате
- hh - часы в 12-часовом формате, с добавлением нуля в начало
- H - часы в 24-часовом формате
- HH - часы в 24часовом формате, с добавлением нуля в начало
- M - минуты
- MM - минуты, с добавлением нуля в начало
- s - секунды
- ss - секунды, с добавлением нуля в начало
- l - миллисекунды
- Z - временная зона
- W - номер недели
- N - номер дня недели
Вы можете между этими спец символами писать любой текст, например так:
!{date|
format: hhч. MMмин. ssсек.;
}
На выходе вы получите что то вроде этого: 07ч. 20мин. 45сек.
ISO-8601
Для получения даты и времени в формате ISO-8601 и у параметра format есть специальные коды. Например чтобы отобразить дату и время в формате ISO, можно написать так:
!{date|
format: isoDateTime;
}
На выходе получите строку вида: 2021-02-28T17:46:21+0700.
Список всех заготовок для работы с ISO:
- isoDate - дата в формате
ISO-8601 - isoTime - время в формате
ISO-8601 - isoDateTime - дата + время в формате
ISO-8601
utc
По умолчанию макрос показывает дату во временной зоне бота, если вы хотите показать время в UTC, воспользуйтесь параметром utc:
Пример:
!{date|
when: now;
utc;
}
differenceWith
До сих пор мы рассматривали примеры отображения даты, а если же вам необходимо показать разницу между двумя датами, например сколько осталось дней или часов, вы можете воспользоваться параметром differenceWith. В этом параметры вы должны указать путь до даты, с которой вы хотите сравнить разницу.
Например у вас есть где нибудь дата наступления события, чтобы узнать сколько времени осталось до этой даты, можно воспользоваться таким макросом:
!{date|
when: now;
differenceWith: Путь.ДоПеременной.Даты;
view: totalHours;
}
view
Параметр view может принимать следующие значения:
- totalSeconds
- totalMinutes
- totalHours
- totalDays
- total
Значения totalSeconds, totalMinutes, totalHours и totalDays показывают разницу в секундах, минутах, часах и днях соответственно.
Значение total - покажет разницу в формате ЧЧ:ММ, если вы хотите изменить шаблон вывода, воспользуйтесь уже знакомым параметром differenceFormat:
differenceFormat
!{date|
when: now;
differenceWith: Путь.ДоПеременной.Даты;
view: total;
differenceFormat: ddд. hhч. mmмин.
}
Параметр differenceFormat может содержать следующие спец символы:
- d - дата(день)
- dd - день с добавление нуля в начало если меньше 10
- h - часы
- hh - часы, с добавлением нуля в начало
- M - минуты
- MM - минуты, с добавлением нуля в начало
- s - секунды
- ss - секунды, с добавлением нуля в начало
withSign
По умолчанию макрос date с параметром differenceWith показывает всегда положительное значение. Если вы хотите получить и знак числа, тогда воспользуйтесь параметром withSign:
!{date|
when: now;
differenceWith: Путь.ДоПеременной.Даты;
view: totalHours;
withSign;
}
В этом случае если проверяемая дата меньше текущей, тогда результат будет отображен со знаком минус.