Топик старый, но проблема может быть актуальна, поэтому специально зарегистрировался, чтобы отписаться.
Волей судьбы пришлось поработать с Битрикс (бррр), и наткнулся на выше упомянутую ошибку Incorrect format of Date/Time при создании элемента инфоблока через CIBlockElement::Add в скрипте, предназначенном для cron.
Надо заметить, что в этом же скрипте успешно отрабатывало обновление свойств инфоблока:
После безуспешных попыток скормить методу Add() всевозможные варианты дат, пришлось залезать в ядро. Обнаружил, что ошибка Incorrect format of Date/Time устанавливается в Bitrix\www\bitrix\modules\main\tools.php, метод CheckDateTime:
Тут дело было в том, что и $format оказывался равен false, и в константе ничего нет. Поэтому независимо от того, в каком формате мы передали $datetime, метод всегда вызывал ошибку Incorrect Date. Отсюда ясно, почему Виктору помогло определение константы:
В моём случае такое решение не подошло, так как константа уже была определена (!), но при этом была равна null. А переопределить константу, как известно, нельзя.
Решение проблемы же было следующим. В скрипте, вместо:
указал:
При этом константа FORMAT_DATETIME обрела, наконец, своё значение, и создание элемента с заполнением свойств ттипа Дата\Время заработало. Кстати, дату-время метод принял и корректно обработал в том же формате, что и при обновлении значений свойств существующего элемента - "11.02.2015 12:29:00"
При всём этом надо не забыть, что, раз мы подключили prolog_admin_before.php вместо обычного prolog_before.php, то значение константы SITE_ID больше не равно "s1" (или какой у вас там), а
равно "ru". Это нужно учесть в скрипте, и вместо константы подставлять идентификатор сайта в виде нужной строки. (по SITE_ID информация тут: )
Волей судьбы пришлось поработать с Битрикс (бррр), и наткнулся на выше упомянутую ошибку Incorrect format of Date/Time при создании элемента инфоблока через CIBlockElement::Add в скрипте, предназначенном для cron.
Надо заметить, что в этом же скрипте успешно отрабатывало обновление свойств инфоблока:
| Код |
|---|
CIBlockElement::SetPropertyValuesEx( $elementId, IBLOCK_ID, array( 'EVENT_DATE' => ConvertTimeStamp($myTimestamp1, 'FULL', 's1'), 'EVENT_END_DATE' => ConvertTimeStamp(myTimestamp2, 'FULL', 's1'), ) ); |
После безуспешных попыток скормить методу Add() всевозможные варианты дат, пришлось залезать в ядро. Обнаружил, что ошибка Incorrect format of Date/Time устанавливается в Bitrix\www\bitrix\modules\main\tools.php, метод CheckDateTime:
| Код |
|---|
function CheckDateTime($datetime, $format=false)
{
if ($format===false && defined("FORMAT_DATETIME"))
$format = FORMAT_DATETIME;
$ar = ParseDateTime($datetime, $format);
...
}
|
| Цитата |
|---|
| Виктор Пекарский написал: Мне помогло вот это Код define("FORMAT_DATETIME", "DD.MM.YYYY HH:MI:SS" ; |
В моём случае такое решение не подошло, так как константа уже была определена (!), но при этом была равна null. А переопределить константу, как известно, нельзя.
Решение проблемы же было следующим. В скрипте, вместо:
| Код |
|---|
define('SITE_ID', 's1');
require ($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/include/prolog_before.php'); |
указал:
| Код |
|---|
require($_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/prolog_admin_before.php'); |
При этом константа FORMAT_DATETIME обрела, наконец, своё значение, и создание элемента с заполнением свойств ттипа Дата\Время заработало. Кстати, дату-время метод принял и корректно обработал в том же формате, что и при обновлении значений свойств существующего элемента - "11.02.2015 12:29:00"
При всём этом надо не забыть, что, раз мы подключили prolog_admin_before.php вместо обычного prolog_before.php, то значение константы SITE_ID больше не равно "s1" (или какой у вас там), а
равно "ru". Это нужно учесть в скрипте, и вместо константы подставлять идентификатор сайта в виде нужной строки. (по SITE_ID информация тут: )
;