В моем CakePHP bootstrap.php у меня есть следующее:
use Cake\I18n\Date;
use Cake\I18n\FrozenDate;
use Cake\I18n\FrozenTime;
use Cake\I18n\Time;
Time::setJsonEncodeFormat('yyyy-MM-dd HH:mm:ss');
FrozenTime::setJsonEncodeFormat('yyyy-MM-dd HH:mm:ss');
Date::setJsonEncodeFormat('yyyy-MM-dd HH:mm:ss');
FrozenDate::setJsonEncodeFormat('yyyy-MM-dd HH:mm:ss');
Когда в методе API я делаю следующее:
use Cake\I18n\Time;
$time = new Time();
$this->set([
'time' => $time,
'_serialize' => ['time']
]);
Результат примерно такой:
{
"time": "2017-05-16 11.55.13"}
Обратите внимание на неправильный формат времени. По какой-то причине CakePHP / PHP 7 / Linux меняет :
к .
, На винде работает нормально.
Версия CakePHP => 3.4.6
(хотя эта проблема была там давно)
Версия PHP => 7.0.15-0ubuntu0.16.04.4
Правильный ответ, предоставленный @ndm:
По крайней мере в версиях ICU до 56.1, правильный способ использовать setJsonEncodeFormat — экранировать двоеточие с помощью '
вот так:
Time::setJsonEncodeFormat("yyyy-MM-dd HH':'mm':'ss");
FrozenTime::setJsonEncodeFormat("yyyy-MM-dd HH':'mm':'ss");
Date::setJsonEncodeFormat("yyyy-MM-dd HH':'mm':'ss");
FrozenDate::setJsonEncodeFormat("yyyy-MM-dd HH':'mm':'ss");
Других решений пока нет …