Twig日期过滤器问题:输出结果异常
解决Twig日期转换错误:从201801031400得到10/27/8364的问题
这个问题我之前也碰到过!核心原因是Twig的date过滤器默认会把数字类型的输入当作Unix时间戳来处理,而你传入的201801031400是一个格式为YmdHi的日期时间字符串(年份4位+月份2位+日期2位+小时2位+分钟2位),直接用过滤器的话,Twig会把这个数字当成时间戳解析,自然得到离谱的年份了。
下面给你两种可行的解决方案:
方案1:在PHP后端提前转换(推荐)
在Symfony的控制器或实体逻辑中,先把字符串转换成DateTime对象,再传递给Twig模板,这样Twig就能正确识别日期类型:
// 假设$startDate是你获取到的"201801031400"字符串 $startDate = '201801031400'; // 按照指定格式创建DateTime对象 $dateObj = \DateTime::createFromFormat('YmdHi', $startDate); // 将处理后的日期对象传给模板 return $this->render('your_template.html.twig', [ 'val' => [ 'start_date' => $dateObj, ], ]);
之后在Twig模板中直接使用过滤器即可得到正确结果:
{{ val.start_date|date("m/d/Y") }}
方案2:直接在Twig模板中处理
如果不想修改后端代码,也可以在Twig里先把数字转为字符串,再指定输入格式让过滤器正确解析:
{{ val.start_date|string|date("m/d/Y", "YmdHi") }}
这里的两个关键步骤:
|string:把数字类型的日期转为字符串,避免Twig误判为时间戳- 第二个参数
"YmdHi":告诉Twig输入字符串的格式,确保它能正确解析出日期
两种方法都能得到正确的输出01/03/2018,你可以根据自己的代码场景选择合适的方式。
内容的提问来源于stack exchange,提问作者Zaheer Ahmad
相关产品推荐
相关产品推荐

