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
相关产品推荐
相关产品推荐

