Содержание
Работа с датой в Битрикс
Фильтрация по дате активности
Для $arFilter
использовать DATE_ACTIVE_FROM
, DATE_ACTIVE_TO
, подробнее
Приведение даты в PHP-формат
Элементы имеют следующие параметры:
CREATED_DATE
- дата создания БЕЗ учета времениDATE_CREATE
- дата создания с учетом времени
- bitrix-date-format.php
$date = DateTime::createFromFormat('Y.m.d', $item['CREATED_DATE']); // только дата $date = DateTime::createFromFormat('d.m.Y H:i:s', $item['DATE_CREATE']); // дата и время
Для свойств:
- bitrix-date-property.php
$date = DateTime::createFromFormat('d.m.Y H:i:s', $item['PROPERTY_SOME_DATE_VALUE']);
Разница в днях между датами
Разница в днях между датой элемента и текущей датой:
- bitrix-date-diff.php
$date = DateTime::createFromFormat('d.m.Y H:i:s', $item['PROPERTY_SOME_DATE_VALUE']); $now = new DateTime(); $dayDiff = $date->diff($now)->format('%a');
Возможно, что битрикс хранит дату записи в одной зоне, а текущее время new DateTime()
- в другой. Поэтому разница только что созданной записи и текущего времени таким образом может быть не равна нулю!
Округление идет в меньшую сторону, т.е. разница в 23 часа 59 мин 59 сек = 0 дней. Можно сказать, что если $date->diff($now)->format('%a') >= 1
, прошло минимум 24 часа.
Точное значение в годах, месяцах, днях, часах, минутах и секундах:
- date-diff.php
die(var_dump( $date->diff($now)->format('%Y-%M-%D %H:%I:%S') ));
Разница в секундах - именно не по секундам, а общая в секундах:
- date-diff-seconds.php
$diff = $now->getTimestamp() - $date->getTimestamp();
Отмотать дату
Отмотать дату на начало предыдущего дня ($numDays = 1
) или позавчера ($numDays = 2
), причем с округлением до полуночи:
- back-in-time.php
$now = new DateTime('now'); $intervalStart = clone $now; $intervalStart->modify(sprintf('-%s day', $numDays))->setTime(0, 0, 0); // 2016-05-04 00:00:00
Начало месяца и начало квартала
Дата начала месяца и квартала для текущей даты.
- current-quarter.php
$monthDate = new DateTime(); // текущая дата $curDay = $monthDate->format('j'); $curMonth = $monthDate->format('n'); $curQuarter = ceil($curMonth / 3); // номер текущего квартала $quarterDeltaMonth = ($curMonth - 1) % 3; if($curDay != 1) { $monthDate->modify(sprintf('-%d day', $curDay - 1)); // начало месяца } $quarterDate = clone $monthDate; $quarterDate->modify(sprintf('-%d month', $quarterDeltaMonth)); // начало квартала