You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Yii框架配置新加坡时区后asTime()方法返回时间不正确如何解决?

问题原因分析
  • 全局formatter配置参数错误:defaultTimeZone参数用于指定输入的原始时间所属时区,你的数据库存储的是UTC时区时间,但配置中误设为了Asia/Singapore,同时缺少指定输出时区的timeZone参数,导致时区转换基准错误。
  • GridView列配置冗余冲突:列配置中先后定义了两次format属性,前者的formatter自定义配置被后者的'format' => 'raw'完全覆盖,且你在value回调中调用的是全局Yii::$app->formatter,该局部配置本身也不会生效。
解决步骤

1. 修正全局formatter配置

修改main.php中的components配置:

'formatter' => [
    'class' => 'yii\i18n\Formatter',
    'dateFormat' => 'php:j M Y',
    'datetimeFormat' => 'php:d/m/Y h:i a',
    'timeFormat' => 'php:H:i A',
    // 原始数据(数据库存储)的时区为UTC
    'defaultTimeZone' => 'UTC',
    // 输出显示的目标时区为新加坡
    'timeZone' => 'Asia/Singapore',
],

2. 清理冗余的GridView列配置

删除列中无效的自定义formatter配置,避免参数冲突:

[
    'attribute' => 'created_at',
    'label' => 'Date',
    'filter' => false,
    'value'=> function($model, $key, $index, $column){ return Search::getDateTime($model); },
    'format' => 'raw',
]

3. 验证依赖扩展(可选)

确认PHP环境已安装intl扩展,Yii的i18n格式化组件依赖该扩展实现时区转换功能,未安装的话需安装后重启服务生效。

效果验证

你提供的示例UTC时间2021-11-22 11:28:16,转换为新加坡时区(UTC+8)后,输出应为:

  • 日期:22 Nov 2021
  • 时间:19:28 PM

内容的提问来源于stack exchange,提问作者Shaho

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 02:15:11