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

如何在Shopify的Liquid中按周自动更新输出当周周四至周日的日期

Shopify Liquid 动态输出当周周四至周日日期方案

不需要创建大型数组,仅靠计算基准偏移量+短循环即可实现,你原有代码存在几处语法和逻辑问题:

  1. Liquid 中不能在 {% %} 标签内部嵌套 {{ }} 标签
  2. 用 %a 取到的是星期缩写字符串,无法直接和时间秒数做加法运算,要先把日期转成时间戳格式才能计算偏移
  3. 硬编码每个工作日的if分支逻辑冗余,维护成本高

以下是可直接运行的实现代码,输出格式和你给出的示例完全匹配,每周自动更新对应日期:

{% comment %} 获取当前星期数字(0=周日,1=周一...4=周四,5=周五,6=周六) {% endcomment %}
{% assign current_weekday = "today" | date: "%w" | plus: 0 %}
{% comment %} 计算到当周周四的偏移量,若已过当周周四则自动取下周周四 {% endcomment %}
{% assign thu_offset = 4 | minus: current_weekday %}
{% if thu_offset < 0 %}
  {% assign thu_offset = thu_offset | plus: 7 %}
{% endif %}

{% comment %} 临时存储四个日期的序数词字符串,仅4个元素不属于大型数组 {% endcomment %}
{% assign date_strings = "" | split: "" %}

{% for i in (0..3) %}
  {% assign day_offset = thu_offset | plus: i | times: 86400 %}
  {% assign target_date = "today" | date: "%s" | plus: day_offset %}
  {% assign day_num = target_date | date: "%-d" | plus: 0 %}
  {% comment %} 处理日期序数词后缀(1st/2nd/3rd/4th) {% endcomment %}
  {% assign suffix = "th" %}
  {% assign mod10 = day_num | modulo: 10 %}
  {% assign mod100 = day_num | modulo: 100 %}
  {% if mod10 == 1 and mod100 != 11 %}
    {% assign suffix = "st" %}
  {% elsif mod10 == 2 and mod100 != 12 %}
    {% assign suffix = "nd" %}
  {% elsif mod10 == 3 and mod100 != 13 %}
    {% assign suffix = "rd" %}
  {% endif %}
  {% assign date_str = day_num | append: suffix %}
  {% assign date_strings = date_strings | push: date_str %}
{% endfor %}

{% comment %} 拼接输出最终文本,自动处理最后一个日期前的and {% endcomment %}
ORDER NOW FOR COLLECTION ON {{ date_strings | slice: 0, 3 | join: ", " }}, and {{ date_strings | last }}.

如果你连仅4个元素的临时数组都不想用,也可以直接在循环内逐个输出日期,只是需要额外处理最后一个日期前的and和逗号的格式问题,用临时数组处理是目前最简洁的方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 18:54:03