Хорошо, я создал новое поле с датой и временем, оно принимает то же значение, что и crdate.
тогда я создал processDatamap_preProcessFieldArray(&$fieldArray, $table)
, где я делаю:
$dateTime = (new \DateTime())->setTimestamp($fieldArray['datetime']);
$dateTime->setTime(00, 00, 00);
$fieldArray['datetime'] = $dateTime->getTimestamp();
в ext_localconf
я добавил:
$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_tcemain.php']['processDatamapClass']['si_news'] =
\Sozialinfo\SiNews\Hooks\TCEmainHook::class;
$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_tcemain.php']['processCmdmapClass']['si_news'] =
\Sozialinfo\SiNews\Hooks\TCEmainHook::class;
и теперь у меня есть crdate без часов, минут и секунд (в новом поле, crdate нетронутым), и я могу выполнить сортировку с этим полем.
Единственное решение для удаления секунд из crdate, которое я нашел, это использовать processDatamap_afterDatabaseOperations
и использовать пользовательский запрос с $GLOBALS['TYPO3_DB']
. Это маленькая грязная ИМО.
Я использую новое поле вместо перезаписи crdate, потому что, как кто-то сказал: crdate является внутренним полем TYPO3. Поэтому я не изменил внутреннее поле TYPO3.
Спасибо всем за помощь.