Битрикс фильтр по дате

В данной статье рассмотрим как при помощи API Битрикса фильтровать по дате в правильном формате.

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

Для начала посмотрим компонент, который по клику на иконку выбирает дату. Зачем это нужно? Вы можете использовать его в своих фильтрах (например, добавив иконку в инпут справа):

<?
$APPLICATION->IncludeComponent(
	"bitrix:main.calendar", 
	"template1", 
	array(
		"SHOW_INPUT" => "Y",
		"FORM_NAME" => "arrFilter_form",
		"INPUT_NAME" => "DATE_FROM",
		"INPUT_NAME_FINISH" => "DATE_TO",
		"INPUT_VALUE" => "",
		"INPUT_VALUE_FINISH" => "",
		"SHOW_TIME" => "N",
		"HIDE_TIMEBAR" => "Y",
		"INPUT_ADDITIONAL_ATTR" => "placeholder=\"дд.мм.гггг\""
	),
	false
);
?>

Такая вот возможность данной CMS :). А теперь перейдем к АПИ.

Как в Битриксе отфильтровать по дате

Если мы будем писать свои фильтры, для начала объявим глобально переменную $arrFilter, а также, $_GET[‘DATE_FROM’] и $_GET[‘DATE_TO’] перекодируем даты (которые пришли к нам с 2 input`ов сформированные компонентами календарь, для каждого свой шаблон и свой name):

<?
global $arrFilter;
if (!empty($_GET['DATE_FROM']) && !empty($_GET['DATE_TO'])) {
	$first = $DB->FormatDate($_GET['DATE_FROM'],"DD.MM.YYYY HH:MI:SS", "YYYY-MM-DD HH:MI:SS");
	$last = $DB->FormatDate($_GET['DATE_TO'],"DD.MM.YYYY HH:MI:SS", "YYYY-MM-DD HH:MI:SS");
}

Обратите внимание на DB->FormatDate. Он позволяет нам перевести дату в тот формат, по которой ее можно отфильтровать. Сразу же в этом блоке добавим массив, используя логику «И»:

<?
global $arrFilter;
if (!empty($_GET['DATE_FROM']) && !empty($_GET['DATE_TO'])) {
	$first = $DB->FormatDate($_GET['DATE_FROM'],"DD.MM.YYYY HH:MI:SS", "YYYY-MM-DD HH:MI:SS");
	$last = $DB->FormatDate($_GET['DATE_TO'],"DD.MM.YYYY HH:MI:SS", "YYYY-MM-DD HH:MI:SS");
	$arrFilter = array(
		"LOGIC" => "AND",
		array(">=PROPERTY_UF_DATE" => $first),
		array("<=PROPERTY_UF_DATE" => $last),
	);
}

Допишем случаи, когда доступна только одна дата:

<?
global $arrFilter;
if (!empty($_GET['DATE_FROM']) && !empty($_GET['DATE_TO'])) {
	$first = $DB->FormatDate($_GET['DATE_FROM'],"DD.MM.YYYY HH:MI:SS", "YYYY-MM-DD HH:MI:SS");
	$last = $DB->FormatDate($_GET['DATE_TO'],"DD.MM.YYYY HH:MI:SS", "YYYY-MM-DD HH:MI:SS");
	$arrFilter = array(
		"LOGIC" => "AND",
		array(">=PROPERTY_UF_DATE" => $first),
		array("<=PROPERTY_UF_DATE" => $last),
	);
}
elseif(!empty($_GET['DATE_FROM'])) {
	$date = $DB->FormatDate($_GET['DATE_FROM'],"DD.MM.YYYY HH:MI:SS", "YYYY-MM-DD HH:MI:SS");
	$arrFilter[] = array(">=PROPERTY_UF_DATE" => $date);
}
elseif(!empty($_GET['DATE_TO'])) {
	$date = $DB->FormatDate($_GET['DATE_TO'],"DD.MM.YYYY HH:MI:SS", "YYYY-MM-DD HH:MI:SS");
	$arrFilter[] = array("<=PROPERTY_UF_DATE" => $date);
}
?>

Помните, если по дате не удается отфильтровать, то причина в неправильном формате, и тут уже на помощь приходит $DB->FormatDate. Таков уж Битрикс 🙂

Напоминаю что на этом сайте есть статья про фильтрацию по году:

Как отфильтровать новости по годам в 1С-Битрикс

автор: Dmitriy

Занимаюсь веб-разработкой с 2011 года. Посмотреть некоторые из моих работ, а также узнать чуть больше обо мне, вы можете на forwww.ru.

Какие услуги предоставляю:
- Создание сайтов, шаблонов и компонентов на 1С-Битрикс;
- Разработка функционала с нуля и доработка кода на уже созданных проектах;
- Адаптивная вёрстка макетов и натяжка на Битрикс;
- Парсинг файлов и выгрузка на сайт (форматы - CSV, XML, XLSX, JSON)
- Интеграции со сторонними сервисами по API;
- Многоязычные версии и многое другое.

Если у вас остались вопросы, свяжитесь со мной любым удобным для вас способом или оставьте комментарий внизу.
E-mail: dmitriyribka@gmail.com
Skype: cinemacreaterus

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *