CakePHP setJsonEncodeFormat无法正常运行

时间:2017-05-16 09:06:24

标签: php cakephp cakephp-3.0 icu intl

在我的CakePHP bootstrap.php中,我有以下内容:

Your Data =>["0"
Your Data =>"31"
Your Data =>"30"]

在API方法中,我执行以下操作:

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');

结果是这样的:

use Cake\I18n\Time;

$time = new Time();

$this->set([
    'time' => $time,
    '_serialize' => ['time']
]);

请注意不正确的时间格式。出于某种原因,CakePHP / PHP 7 / Linux将{ "time": "2017-05-16 11.55.13" } 更改为:。在Windows上它工作正常。

CakePHP版本=> .(虽然这个问题已存在很长时间了)

PHP Version => 3.4.6

1 个答案:

答案 0 :(得分:1)

@ndm提供的正确答案:

至少在56.1之前的ICU版本中,使用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");