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

Symfony6+Twig中Asia/Amman时区偏移异常问题排查

解决Symfony+Twig中Asia/Amman时区偏移错误问题

问题根源

你遇到的问题是:存储在MySQL的UTC时间,通过Twig的format_datetime过滤器指定Asia/Amman时区时,显示UTC+2偏移(实际应为UTC+3),但原生PHP DateTime处理同一时间能得到正确的UTC+3结果。

这是因为Symfony的Intl组件依赖的ICU时区数据库版本过旧,没有更新约旦2022年取消夏令时后永久采用UTC+3的规则;而原生PHP DateTime使用的是系统自带的tzdata数据库,已经包含了这个更新,所以两者结果不一致。

解决步骤

1. 更新系统时区数据库

先确保服务器的时区数据是最新的:

  • Debian/Ubuntu系统:
    sudo apt-get update && sudo apt-get install --only-upgrade tzdata
    
  • RHEL/CentOS系统:
    sudo yum update tzdata
    

2. 更新Symfony Intl组件(可选)

如果你的项目依赖symfony/intl组件,更新到最新稳定版,它会包含更新后的ICU时区数据:

composer update symfony/intl

3. 清除Symfony缓存

Symfony会缓存时区相关配置,更新后必须清空缓存:

# 开发环境
php bin/console cache:clear

# 生产环境
php bin/console cache:clear --env=prod

4. 验证修复效果

在Twig模板中添加测试代码,确认结果:

{% set utcDate = '2024-01-26 05:15:29.329004'|date_create(null, 'UTC') %}
Twig处理Asia/Amman时区:{{ utcDate|format_datetime('yyyy-MM-dd HH:mm:ss', timezone='Asia/Amman') }}

如果输出2024-01-26 08:15:29,说明问题已解决。

额外说明

如果你的PHP是编译时自带ICU库而非使用系统ICU,需要重新编译PHP并使用最新版ICU,或者通过PECL更新intl扩展:

pecl install intl

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 04:33:43