CakePHP setJsonEncodeFormat не работает должным образом

В моем 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

1

Решение

Правильный ответ, предоставленный @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");
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]