CakePHP не поддерживает формат, используемый локальным вводом даты и времени HTML5 (YYYY-MM-DDTHH:MM
) из коробки (пока).
Вы можете решить эту проблему, например, используя пользовательскую / расширенную базу данныхтип, который добавляет правильный формат к существующим форматам по умолчанию (это повлияет на все поля / столбцы даты и времени), например:
// in src/Database/Type/DateTimeType.php
namespace App\Database\Type;
class DateTimeType extends \Cake\Database\Type\DateTimeType
{
public function __construct($name = null)
{
$this->_format[] = 'Y-m-d\TH:i'; // date() compatible format
parent::__construct($name);
}
}
// in config/boostrap.php before `Type::build('datetime')` is invoked
Type::map('datetime', \App\Database\Type\DateTimeType::class);
путем синтаксического анализа ввода перед маршалингом:
// in a table class, a behavior, or a listener for the Model.beforeMarshal event
public function beforeMarshal(\Cake\Event\Event $event, \ArrayObject $data, \ArrayObject $options)
{
if (isset($data['fieldName']) &&
is_string($data['fieldName'])
) {
$data['fieldName'] = \Cake\I18n\Time::parseDateTime(
$data['fieldName'],
"yyyy-MM-dd'T'HH:mm" // ICU compatible format
);
}
}
или путем включения локализованного анализа и предоставления соответствующего формата (это ограничит все поля / столбцы даты и времени этим одним форматом):
// in config/bootstrap.php
Type::build('datetime')
->useImmutable()
->useLocaleParser()
->setLocaleFormat("yyyy-MM-dd'T'HH:mm"); // ICU compatible format
См. Также