Примеры работы с датами

Урок 54 из 248
Автор: Марина Павлова
Сложность урока:
3 уровень - средняя сложность. Необходимо внимание и немного подумать.
3 из 5
Просмотров: 74485
Дата изменения: 28.03.2024
Недоступно в лицензиях:
Текущую редакцию Вашего 1С-Битрикс можно просмотреть на странице Обновление платформы (Marketplace > Обновление платформы).
Старт, Стандарт, Малый бизнес

В уроке рассмотрим возможности работы с датами в бизнес-процессах. Результаты выведем с помощью действия Сообщение соц.сети Действие отправляет уведомление модуля социальной сети.

Подробнее...
.

  Перевод даты на русский язык

Для вывода даты используется функция date date - Форматирует вывод системной даты/времени

. В примере используем параметр F - полное наименование месяца. Список всех параметров функции смотрите в документации по PHP.

Текущий месяц - {{=date('F',{=System:Date})}}

В результате получим уведомление вида Текущий месяц - April.

Для получения названия месяца на русском языке понадобится создать Список соответствия для названий месяцев. Введем переменную бизнес-процесса типа Список:

В вариантах значений в квадратных скобках укажем ключ - номер месяца, а после - значение (название месяца на русском языке).

Вернемся к шаблону бизнес-процесса и перед сообщением соц.сети добавим действие Изменение переменных в котором укажем функцию {{=date('n')}}, где n - порядковый номер месяца без ведущего нуля (из документации по PHP).

В действии Уведомление соц. сети поменяем текст сообщения на вывод нашей переменной Variable1:

Текущий месяц - {=Variable:Variable1 > printable}

Результат:

Таким же образом можно выводить дни недели и др. подобные даты.

  Относительный формат даты

Задание: необходимо вывести дату - пятница следующей недели. Сделать это можно с помощью работы функции strtotime и относительных форматов PHP.

Создадим новую переменную Дата и снова воспользуемся действием Изменение переменных, как в примере выше. Укажем значение ='next week friday':

А в тексте сообщения соц. сети выведем переменную Дата.

Следующая пятница - {=Variable:Variable2 > printable}

Результат

  Добавление N дней из параметра

Сначала посмотрим на простой пример: прибавим к текущей дате точное количество дней.

Для этого понадобится функция dateadd:

Текущая дата + 2 дня: {{=dateadd({=System:Date}, '2d')}} // прибавим 2 дня к текущей дате

Теперь посмотрим, как правильно добавлять количество дней, которое хранится в параметре БП:

Текущая дата + N дней: {{=dateadd({=System:Date}, {=Template:Parameter1} & 'd')}} // прибавим дни из параметра к текущей дате

Важно! Для правильного указания количества дней из параметра применен оператор конкатенации, который возвращает строку, представляющую собой соединение левого и правого аргумента.

Результат (при запуске БП для параметра указано значение 10):

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

Текущая дата - 2 дня: {{=dateadd({=System:Date}, '-2d')}} // отнимем 2 дня из текущей даты

Текущая дата - N дней: {{=dateadd({=System:Date}, '-' & {=Template:Parameter1} & 'd')}} // отнимем дни, указанные в параметре, из текущей даты

  Разница между двумя датами

Функция datediff() позволяет вычислять разницу между двумя датами.

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

{{=datediff({{Дата создания элемента}},{=System:NowLocal},"%d")}}

, где %d - значение параметра форматирования результата. Все значения параметра смотрите в документации PHP.

Для правильного использования функции, важно понимать, какой результат возвращает функция и как его использовать.

Возьмем две даты (с одинаковым днём):

  • Date1: 18.01.2022 12:15:25
  • Date2: 18.01.2022 18:31:00

Посчитаем разницу между этими датами:

{{=datediff({Date1},{Date2},"%h часов %i минут %s секунд")}}
// результат: 6 часов 15 минут 35 секунд

Если для этих же дат мы запишем функцию только со значением %i:

{{=datediff({Date1},{Date2},"%i")}}
// результат: 15

, то получим результат: 15. Т.о. функция datediff не переводит разницу в одну единицу времени (в минуты или в секунды). Её результатом всегда является расчет в полном формате (сколько прошло лет, месяцев, дней, часов и т.д. между двумя датами). А при помощи третьего параметра функции мы указываем лишь какие данные из этого результата отобразить.

Исключением является вариант %a, который выводит общее количество дней между датами. Проверим на том же примере, только для первой даты изменим год на 2020:

  • Date1: 18.01.2020 12:15:25
  • Date2: 18.01.2022 18:31:00

{{=datediff({Date1},{Date2},"%d")}}
// %d - количество дней
// результат: 0
{{=datediff({Date1},{Date2},"%a")}}
// %a - общее количество дней
// результат: 731

Как видим, в первом варианте количество дней равно 0, т.к. прошло ровно 2 года и 0 дней. А во втором варианте результат 731 день, т.е. количество дней за 2 года.

  Проверка корректности времени

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

	=if(and((intval(substr({=Template:Parameter1}, 0, 2)) >= 0), (intval(substr({=Template:Parameter1}, 0, 2)) < 25), (substr({=Template:Parameter1}, 2, 1) = ":"), (intval(substr({=Template:Parameter1}, 3, 2)) >= 0), (intval(substr({=Template:Parameter1}, 3, 2)) < 60)), {=Template:Parameter1}, "время указано неправильно")

Если в параметре {=Template:Parameter1} передается время (в 24 часовом формате ЧЧ:ММ, например 21:45), то возвращается его значение. Иначе вернется время указано неправильно.



Нам жаль это слышать… Но мы постараемся быть лучше!

Мы благодарны Вам за помощь в улучшении документации.

Спасибо, мы рады что смогли помочь Вам. Ниже Вы можете оставить свой отзыв или пожелание :)
Мы стараемся сделать документацию понятнее и доступнее,
и Ваше мнение важно для нас
Курсы разработаны в компании «1С-Битрикс»