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

如何在Smarty中为自定义日期变量添加指定天数,解决date_format取值错误

问题原因

你现有写法存在3个核心错误:

  1. Smarty的date_format修饰器默认接收Unix时间戳格式的入参,你的$order.details.order_date是DD-MM-YYYY格式的字符串,Smarty无法识别该字符串为有效日期,会自动 fallback 到当前时间戳(也就是smarty.now的值),这就是你加|date_format后就显示当前日期的原因。
  2. 你之前用的"+5 days"|strftime写法是直接基于当前时间计算偏移,完全没有用到订单日期变量,自然无法得到正确结果。
  3. 尝试的{"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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 10:36:06