Имеем:
поле в базе типа TIMESTAMP
мапинг этого поля с типом datetime
Если поле имеет значение NULL, то всё ок.
НО если поле имеет значение 0000-00-00 00:00:00, \Bitrix\Main\DB\Result::fetch() проводит пост обработку методом \Bitrix\Main\DB\MysqliResult::convertDataFromDb()
protected function convertDataFromDb($value, $fieldType)
{
switch ($fieldType)
{
case 'timestamp':
case 'datetime':
return $value === null ? null : new \Bitrix\Main\Type\DateTime($value, "Y-m-d H:i:s");
break;
case 'date':
return $value === null ? null : new \Bitrix\Main\Type\DateTime($value, "Y-m-d");
break;
default:
break;
}
return $value;
} |
и врезультате \Bitrix\Main\Type\DateTime::getValue()->toString() возращает
-0001-11-30 00:00:00
Что является некорректным.
Предлагаю внести дополнительную проверку на основе \Bitrix\Main\Type\DateTime::getTimestamp()
при таком значении вернёт false