【发布时间】:2020-05-17 10:16:44
【问题描述】:
在将我们的应用程序迁移到 PHP 7.2 和新的服务器环境后,在 CakePHP 3.5 的 Time/FrozenTime 对象的 JSON 结果中显示时区时遇到了一个奇怪的问题。
当像这样格式化一个新的 Cake\I18n\Time 时会出现一个简化的例子:
(new Time())->i18nFormat("yyyy-MM-dd'T'HH:mm:ssxxx")
以前这会返回一个像这样的字符串:
2020-01-31T10:57:43-07:00
但是在我们的新环境中,相同的代码无法返回时区部分,而是返回如下结果:
2020-01-31T10:57:43
在内部,跟踪 i18nFormat 到 Cake\I18n\DateFormatTrait::_formatObject,它们似乎都在调用完全相同的参数来 datefmt_create:
static::$_formatters[$key] = datefmt_create(
'America/Denver',
0,
0,
'America/Denver',
1,
'yyyy-MM-dd\'T\'HH:mm:ssxxx');
但这似乎返回不同的结果,“xxx”部分没有效果。
是否有一些环境设置会影响这一点?还是其他原因造成的?
我怎样才能找回时区部分?
【问题讨论】:
-
输出的差异通常是由INTL/ICU版本的差异造成的,所以我先检查一下那里可能有什么不同,然后相应地升级或降级。
-
谢谢,我会调查的
标签: php cakephp cakephp-3.5