← Назад к заметкам

Заметки

Дата в БП: System:Date, System:Now, System:NowLocal — чем отличаются

Чем отличаются системные даты в бизнес-процессах Bitrix24 и почему сравнение дат может ломаться из-за времени и часового пояса.

{=System:Date} — это текущая дата без времени. {=System:Now} — текущие дата и время сервера. {=System:NowLocal} — текущие дата и время пользователя с учётом часового пояса. Если смешать эти значения в одном условии, робот может сработать раньше или позже ожидаемого.

Задача

В бизнес-процессах Bitrix24 часто нужно сравнить дату из поля с текущей датой: проверить просрочку, поставить дедлайн, запустить действие сегодня или отложить задачу до нужного момента.

На этом месте легко ошибиться, потому что в БП есть несколько похожих системных значений: {=System:Date}, {=System:Now} и {=System:NowLocal}. Они похожи по названию, но дают разные результаты.

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

Чем отличаются значения

Главное отличие — есть ли во значении время и к какому часовому поясу оно относится.

{=System:Date} — это текущая дата без времени. Такое значение удобно, если в логике нужен именно день: сегодня, завтра, дата отчёта, дата контрольной точки.

{=System:Date}

{=System:Now} — текущие дата и время сервера. В коробочной версии это время сервера, на котором установлен продукт. Такое значение подходит для технической логики, которая должна опираться на серверное время.

{=System:Now}

{=System:NowLocal} — текущие дата и время пользователя с учётом его часового пояса. В CRM-роботах это часто более ожидаемый вариант, потому что он ближе к тому, что человек видит в интерфейсе.

{=System:NowLocal}

Из-за этого нельзя выбирать значение только по названию. Нужно понимать, что именно сравнивает робот: календарную дату, точный момент времени или момент времени глазами пользователя.

Где ломается сравнение дат

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

Например, в поле «Крайний срок» хранится только дата:

04.07.2026

А робот сравнивает её с текущим моментом:

{=System:NowLocal}

Для пользователя это может выглядеть как «срок сегодня». Но для вычисления дата без времени часто превращается в начало дня. В итоге в середине дня условие может уже считать срок прошедшим.

Похожая проблема появляется, когда один сотрудник работает в одном часовом поясе, а портал или сервер — в другом. Если сравнение построено на {=System:Now}, оно может сработать по серверному времени, а не по времени пользователя.

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

Что использовать в роботах

Универсального варианта нет. Выбор зависит от того, какую задачу должен решить робот.

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

{{=if({{Контрольная дата}} < {=System:Date}, "просрочено", "не просрочено")}}

Если нужно сравнить точный момент времени, используйте дату со временем:

{{=if({{Крайний срок}} < {=System:NowLocal}, "просрочено", "не просрочено")}}

Если робот должен считать срок относительно пользователя, обычно логичнее брать {=System:NowLocal}. Если логика техническая и должна быть единой для всех, можно использовать {=System:Now}.

Для вывода даты в сообщении или комментарии можно дополнительно использовать модификаторы часового пояса. Например:

{{=Document:DEADLINE > responsible}}

Такой подход полезен, когда дата хранится как одно значение, но показать её нужно во времени ответственного. Для похожих задач также используются модификаторы local, server и responsible.

Главное — не смешивать два сценария. Для расчёта робот должен использовать подходящее значение даты, а для красивого отображения можно уже отдельно привести дату к нужному часовому поясу.