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