Получаю на фронте данные с помощью
В контроллере метод в упрощённом виде выглядит так
Код |
---|
/**
* @return array
* @throws \Exception
*/
public function getAction(): array
{
$rows = [];
$dislocations = DislocationTable::getList()->fetchCollection();
foreach ($dislocations as $dislocation) {
$fields = array_filter( $dislocation->collectValues() );
$rows[] = $fields;
}
return [
'rows' => $this->convertKeysToCamelCase( $rows ),
];
}
|
При этом, в таблице
DislocationTable, из которой я получаю данные много полей типа
DatetimeField.
По умолчанию, результат выполнения метода пропускается через
Bitrix\Main\Engine\Response\processData, в котором если тип
DateTime, то жёстко возвращается дата в формате
ISO 8601Код |
---|
if ($data instanceof DateTime)
{
return date('c' , $data->getTimestamp());
} |
По логике, думаю раз получаю в этом формате, то и отправлять нужно в нём же.
При этом, если с фронта отправить данные в формате
ISO 8601 (например
2019-03-25T12:05:00.000+05:00) на тот же контроллер и попытаться записать в ту же таблицу, то получаем исключение
Incorrect date/timeDateTime не может спарсить дату потому, что использует дефолтный формат
d.m.Y H:i:s (я пока не понял откуда он берётся, ведь в
Bitrix\Main\Context\Culture формат для даты-времени другой. Хотя разве что из "Настройки Битрикс24").
Это нормальное поведение системы или я что-то делаю не так?)