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

