В методе CIBlockElement::GetList() есть параметр фильтра для выборки активных элементов по дате. Т.е. проверка происходит еще в запросе и не надо в списке нечего проверять дополнительно.
Если вам нужно обратная сторона действия с фильтрацией по дате активности, то у вас это не получится сделать. Мной ожидалось поведение, что если
заменить Y на N то выборка отдаст только не активные по дате элементы, но к сожалению это не так, читаем еще раз док и убеждаемся в этом.
ACTIVE_DATE — непустое значение задействует фильтр по датам активности.
Будут выбраны активные по датам элементы.Если значение не установлено («»), фильтрация по датам активности не производится;
Приходится делать полную выборку и проверят уже в результате что конечно не очень хорошо.
function __isElelementDateActive($s_DateFrom, $s_DateTo) { $stmp_DateFrom = MakeTimeStamp($s_DateFrom, "DD.MM.YYYY HH:MI:SS"); $stmp_DateTo = MakeTimeStamp($s_DateTo, "DD.MM.YYYY HH:MI:SS"); $stmp_Date = MakeTimeStamp(date('d.m.Y H:i:s'), "DD.MM.YYYY HH:MI:SS"); return ($stmp_Date > $stmp_DateFrom && $stmp_Date < $stmp_DateTo); } + бонус, проверка если дата истекает за 1 день function __isOneDayShowElement($s_DateTo) { $stmp_DateTo = MakeTimeStamp($s_DateTo, "DD.MM.YYYY"); $stmp_Date = MakeTimeStamp(date('d.m.Y'), "DD.MM.YYYY"); return (($stmp_DateTo - $stmp_Date) == 86400); } + дата и время function isDateTimeActive($date_from, $date_to) { $ar_From = explode(' ', $date_from); $ar_DateFrom = explode('.', $ar_From[0]); $ar_TimeFrom = explode(':', $ar_From[1]); $ar_To = explode(' ', $date_to); $ar_DateTo = explode('.', $ar_To[0]); $ar_TimeTo = explode(':', $ar_To[1]); $ar_Date = explode('.', date('d.m.Y')); $ar_Time = explode(':', date('H:i:s')); $s_MetaDateFrom = mktime($ar_TimeFrom[0], $ar_TimeFrom[1], $ar_TimeFrom[2], $ar_DateFrom[1], $ar_DateFrom[0], $ar_DateFrom[2]); $s_MetaDateTo = mktime($ar_TimeTo[0], $ar_TimeTo[1], $ar_TimeTo[2], $ar_DateTo[1], $ar_DateTo[0], $ar_DateTo[2]); $s_MetaDate = mktime($ar_Time[0], $ar_Time[1], $ar_Time[2], $ar_Date[1], $ar_Date[0], $ar_Date[2]); return ($s_MetaDate >= $s_MetaDateFrom && $s_MetaDate <= $s_MetaDateTo); }