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

Twig中localizeddate过滤器年份显示异常问题排查

问题原因与解决方案

这个问题的核心是你在localizeddate过滤器的格式字符串里误用了YYYY(周年,Week Year),而不是yyyy(格里高利历法的常规年份)。

具体分析:

Twig的localizeddate底层依赖PHP的IntlDateFormatter,而ICU(国际化组件)的日期格式规则里有明确区分:

  • YYYY代表周年:即当前日期所属的周对应的年份,周的起始规则由Locale决定
  • yyyy代表格里高利历法的常规年份:也就是我们日常使用的公历年

你的DateTime对象是2017-01-01 08:00:00 +01:00,这一天是周日:

  • 对于fr、de、it等欧洲Locale,一周的起始日是周一,2017年的第一周是从1月2日(周一)开始的,所以1月1日(周日)属于2016年的最后一周,因此YYYY会返回2016
  • 对于en(美式英语)Locale,一周的起始日是周日,1月1日正好属于2017年的第一周,所以YYYY返回2017
  • 而date过滤器或者localizeddate的medium预设格式,默认使用的是常规年份(对应yyyy),所以能正确显示2017

解决方法:

把格式字符串里的YYYY替换成yyyy即可:

{{ testdate|localizeddate('none', 'none', "fr", "Europe/Paris", "d MMM yyyy") }}

修改后,无论切换到哪个Locale,都会正确显示2017年。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:22:40