如何在Smarty中为自定义日期变量添加指定天数,解决date_format取值错误
问题原因
你现有写法存在3个核心错误:
- Smarty的
date_format修饰器默认接收Unix时间戳格式的入参,你的$order.details.order_date是DD-MM-YYYY格式的字符串,Smarty无法识别该字符串为有效日期,会自动 fallback 到当前时间戳(也就是smarty.now的值),这就是你加|date_format后就显示当前日期的原因。 - 你之前用的
"+5 days"|strftime写法是直接基于当前时间计算偏移,完全没有用到订单日期变量,自然无法得到正确结果。 - 尝试的
{"order.details.order_date +5 Days"|date_format:'%A, %e de %B'}写法错误,引号内的变量不会被Smarty解析,相当于传入了无效字符串,同样会触发当前日期 fallback 逻辑。
正确实现方法
首先用strtotime修饰器把字符串格式的订单日期转成Unix时间戳,再基于该时间戳做天数偏移计算,最后格式化即可:
{* 1. 将订单日期字符串转为时间戳 *} {assign var="order_ts" value=$order.details.order_date|strtotime} {* 2. 加指定天数,把5替换为你需要的X天即可 *} {assign var="order_after_add" value="+5 days"|strtotime:$order_ts} {* 3. 格式化输出日期,格式可自定义 *} {$order_after_add|date_format:"%A %e %B"} {* 获取星期几赋值给estimated_days的写法 *} {assign var="estimated_days" value=$order_after_add|date_format:"%u"}
如果需要写为单行合并写法,可以直接嵌套修饰器:
{$order.details.order_date|strtotime|strtotime:"+5 days"|date_format:"%A, %e de %B"}
内容的提问来源于stack exchange,提问作者Edgar
相关产品推荐
相关产品推荐

