アプリケーションを 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」の部分は効果がありません。
これに影響を与える環境設定はありますか?それとも他の何かが原因ですか?
タイムゾーン部分を元に戻すにはどうすればよいですか?