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

Smarty模板按星期几动态调整日期加天数问题排查

解决Smarty模板中根据订单日期星期几添加对应天数的问题

问题核心原因

你当前的代码存在两个关键问题:

  • 错误使用$smarty.now获取星期几,这取的是服务器当前时间的星期,而非订单日期对应的星期,完全偏离需求逻辑。
  • 多个独立的{if}分支写法冗余,且若逻辑覆盖出现重叠(虽当前场景不会),可能导致重复输出;同时你遇到的"仅最后一个条件生效",大概率是前序条件未匹配(因为取的是当前时间而非订单日期)。

正确实现代码(适配Smarty + PHP8)

清晰拆分版(易维护)

{* 1. 解析订单日期,获取对应的星期几(%u规则:1=周一,7=周日) *}
{assign var="order_weekday" value=$order.details.order_date|replace:'/':'-'|strtotime|date_format:"%u"}

{* 2. 根据星期几确定要添加的天数 *}
{assign var="add_days" value=8}
{if $order_weekday == 7}
    {assign var="add_days" value=9}
{elseif $order_weekday == 5 || $order_weekday == 6}
    {assign var="add_days" value=10}
{/if}

{* 3. 统一计算并格式化最终日期 *}
{$order.details.order_date|replace:'/':'-'|cat:' +'|cat:$add_days|cat:' days'|date_format:'%A, %e de %B del %Y'}

紧凑简化版(适合追求代码简洁场景)

{assign var="order_weekday" value=$order.details.order_date|replace:'/':'-'|strtotime|date_format:"%u"}
{$order.details.order_date|replace:'/':'-'|cat:' +'|cat:($order_weekday ==7 ? 9 : ($order_weekday ==5 || $order_weekday ==6 ? 10 :8))|cat:' days'|date_format:'%A, %e de %B del %Y'}

代码说明

  • 第一步通过strtotime解析订单日期后再取星期几,确保获取的是订单日期本身对应的星期,而非当前时间。
  • 采用{if}{elseif}结构替代多个独立{if},逻辑分支清晰,只会执行匹配的第一个条件,避免冗余和潜在的多输出问题。
  • 统一日期格式化逻辑,减少重复代码,提升可维护性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 03:21:08