При использовании метода 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;
}