Заметки
DateTime::compile в ORM: в фильтр попал объект другого класса
Ошибка Call to undefined method DateTime::compile() может появиться в фильтре ORM, хотя сам объект даты создан без ошибок. Причина — два разных класса с коротким именем DateTime: стандартный PHP и Bitrix\Main\Type\DateTime.
Для фильтра по дате в D7 передавайте объект Bitrix. Пример для PHP-консоли администратора коробки:
use Bitrix\Main\Loader;
use Bitrix\Main\Type\DateTime as BitrixDateTime;
use Bitrix\Crm\DealTable;
if (!Loader::includeModule('crm')) {
throw new RuntimeException('Модуль CRM недоступен');
}
$ob_date = BitrixDateTime::createFromPhp(new \DateTime('2026-01-01 00:00:00'));
$ob_rows = DealTable::getList([
'filter' => ['>=DATE_CREATE' => $ob_date],
'select' => ['ID', 'DATE_CREATE'],
'order' => ['ID' => 'ASC'],
'limit' => 50,
]);
print_r($ob_rows->fetchAll()); createFromPhp() преобразует стандартный объект PHP в тип Bitrix. Алиас BitrixDateTime делает это различие явным. Когда исходное значение — Unix timestamp, есть createFromTimestamp().
Не превращайте дату в SQL-строку только ради фильтра. Если нужна дата из строки, у конструктора Bitrix можно явно указать формат. Значение без формата может интерпретироваться по региональным настройкам.
Этот пример читает ORM напрямую в административном контексте. Для выборки CRM с проверкой прав пользователя используйте соответствующую операцию/API, а не публикуйте такую консоль как открытый обработчик.
Документация: DateTime::createFromPhp; Bitrix Main Type DateTime.