如何在Shopify Liquid中基于多条件设置配送日期?
订单预计配送日期计算修复方案
问题分析
原代码核心问题在于逻辑判断漏洞与流程混淆,导致日期计算不符合预期:
- 第一个
if语句的逻辑表达式错误,day_of_week != "6" or day_of_week != "7"永远为真,使得截止时间判断完全失效 - 未明确拆分「发货日期计算」与「配送日期计算」两个核心流程,逻辑混乱
- 周末日期调整规则重复且矛盾
修正后的代码
{% assign current_time = "2023-04-14 13:30:00" | date: "%s" %} {% assign cutoff_hour = 13 %} {% assign current_date_str = current_time | date: "%Y-%m-%d" %} {% comment %} 第一步:计算发货日期 {% endcomment %} {% assign ship_date = current_time %} {% if current_time > current_date_str | append: " " | append: cutoff_hour | append: ":00:00" | date: "%s" %} {% comment %} 超过当天截止时间,延后1天 {% endcomment %} {% assign ship_date = ship_date | plus: 86400 %} {% endif %} {% comment %} 调整发货日期至下一个工作日(周一至周五) {% endcomment %} {% assign ship_day = ship_date | date: "%u" %} {% if ship_day == "6" %} {% comment %} 周六,延后2天到周一 {% endcomment %} {% assign ship_date = ship_date | plus: 172800 %} {% elsif ship_day == "7" %} {% comment %} 周日,延后1天到周一 {% endcomment %} {% assign ship_date = ship_date | plus: 86400 %} {% endif %} {% comment %} 第二步:从发货日期计算配送日期(此处为发货后1天配送,可按需修改时长) {% endcomment %} {% assign delivery_date = ship_date | plus: 86400 %} {% assign delivery_day = delivery_date | date: "%u" %} {% comment %} 确保配送日期不为周日 {% endcomment %} {% if delivery_day == "7" %} {% assign delivery_date = delivery_date | plus: 86400 %} {% endif %} {% assign delivery_date_formatted = delivery_date | date: "%A, %B %d" %} <div> <span style="margin-right:10px; float:left;" fill="none">{% include 'del-box' %}</span> <span style="margin:0px; overflow:hidden; display:block;">Delivered by <b>{{ delivery_date_formatted }}</b></span> </div>
关键修正说明
- 拆分「发货」「配送」两个独立计算流程,逻辑更清晰易维护
- 修复截止时间判断逻辑,仅在周一至周五超过13点时延后发货
- 明确周末发货规则:周六/周日的订单自动延后至下周一发货
- 确保配送日期避开周日,符合「周一至周六配送」的要求
- 预留配送时长调整点(
plus: 86400代表发货后1天配送,可根据实际业务修改)
内容的提问来源于stack exchange,提问作者SDZ
相关产品推荐
相关产品推荐

