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

