среда, 3 октября 2012 г.

1С-Битрикс - фильтрация по дате (Пользовательское поле).

Недавно пришлось сделать небольшой виджет, вида "Праздник дня".  который вправом блоке сайта выводил бы сегоднешний праздник.
Для этог опришлось создать пользовательское поле типа "Дата/Время" с сивольным кодом "CELEBRATE_DATE" в котором я указываю дату праздника и по этому полю получать информацию в виджет.

Вся соль в том, что в документации по фильтрам написана следующая конструкция
$arFilter = array(
    "PROPERTY_CODE" => "VALUE",
);
Эта запись подходит для полей типа строка, число, но не для даты.
Битрикс не конвертирует сам дату в необходимый формат.
В базе данных дата хранится в следующем формате "d-m-YYYY H:i:s" , и нам необходимо любым способом привести ее к этому формату.

У битрикса есть методы по приведению даты к нужному формату, например,
$DB->CharToDateFunction(date("d.m.2010 00:00:00") );

Но мне этот метод не подошел и я воспользовался встроенной функцией в PHP
date("2010-m-d 00:00:00")

Теперь можно приступить к созданию фильтра для компонента
$arFilter = array(
    "PROPERTY_CELEBRATE_DATE" => date("2010-m-d 00:00:00"),
    "SECTION_CODE" => "celebration-of-the-day",
    "IBLOCK_ID" => "7"
);
С остальными полями фильтра проблем возникнуть недолжно.
Все, наш фильтр готов к использованию.

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

После текущей даты
arFilter = array(
     ">PROPERTY_CELEBRATE_DATE" => date("YYYY-m-d 00:00:00")
);
До текущей даты
$arFilter = array(
     "<PROPERTY_CELEBRATE_DATE" => date("YYYY-m-d 00:00:00")
);
Все даты кроме этой
$arFilter = array(
     "!PROPERTY_CELEBRATE_DATE" => date("YYYY-m-d 00:00:00")
);