ГлавнаяБлогПроверка активности элемента по дате [bitrix api]

Проверка активности элемента по дате [bitrix api]

Рамиль Юналиев
Рамиль Юналиев
E-Commerce Lead
9 ноября 2011 г.
1 мин чтения

При использовании метода CIBlockElement::GetList() параметр фильтра ACTIVE_DATE позволяет выбрать только активные элементы, но не может быть использован для получения неактивных по дате элементов. В результате приходится делать полную выборку и проверять активность вручную.

/**
 * Проверка активности элемента по дате (только дата, без времени)
 * @param string $s_ActiveFrom - дата начала активности (DD.MM.YYYY или DD.MM.YYYY HH:MI:SS)
 * @param string $s_ActiveTo - дата окончания активности
 * @return bool
 */
function __isElelementDateActive($s_ActiveFrom, $s_ActiveTo)
{
    $i_Now = mktime(0, 0, 0, date("m"), date("d"), date("Y"));
 
    $ar_From = explode(" ", $s_ActiveFrom);
    $ar_To   = explode(" ", $s_ActiveTo);
 
    $ar_DateFrom = explode(".", $ar_From[0]);
    $ar_DateTo   = explode(".", $ar_To[0]);
 
    $i_From = mktime(0, 0, 0, $ar_DateFrom[1], $ar_DateFrom[0], $ar_DateFrom[2]);
    $i_To   = mktime(0, 0, 0, $ar_DateTo[1],   $ar_DateTo[0],   $ar_DateTo[2]);
 
    if($i_From <= $i_Now && $i_Now <= $i_To)
        return true;
 
    return false;
}
 
/**
 * Проверка, истекает ли элемент за 1 день
 * @param string $s_ActiveFrom - дата начала активности
 * @param string $s_ActiveTo - дата окончания активности
 * @return bool
 */
function __isOneDayShowElement($s_ActiveFrom, $s_ActiveTo)
{
    $ar_From = explode(" ", $s_ActiveFrom);
    $ar_To   = explode(" ", $s_ActiveTo);
 
    if($ar_From[0] == $ar_To[0])
        return true;
 
    return false;
}
 
/**
 * Проверка активности с учётом даты и времени
 * @param string $s_ActiveFrom - дата и время начала активности (DD.MM.YYYY HH:MI:SS)
 * @param string $s_ActiveTo - дата и время окончания активности
 * @return bool
 */
function isDateTimeActive($s_ActiveFrom, $s_ActiveTo)
{
    $i_Now = time();
 
    $ar_From = explode(" ", $s_ActiveFrom);
    $ar_To   = explode(" ", $s_ActiveTo);
 
    $ar_DateFrom = explode(".", $ar_From[0]);
    $ar_DateTo   = explode(".", $ar_To[0]);
 
    $ar_TimeFrom = explode(":", $ar_From[1]);
    $ar_TimeTo   = explode(":", $ar_To[1]);
 
    $i_From = mktime($ar_TimeFrom[0], $ar_TimeFrom[1], $ar_TimeFrom[2],
                     $ar_DateFrom[1], $ar_DateFrom[0], $ar_DateFrom[2]);
    $i_To   = mktime($ar_TimeTo[0],   $ar_TimeTo[1],   $ar_TimeTo[2],
                     $ar_DateTo[1],   $ar_DateTo[0],   $ar_DateTo[2]);
 
    if($i_From <= $i_Now && $i_Now <= $i_To)
        return true;
 
    return false;
}