如何在Shopify的Liquid中按周自动更新输出当周周四至周日的日期
Shopify Liquid 动态输出当周周四至周日日期方案
不需要创建大型数组,仅靠计算基准偏移量+短循环即可实现,你原有代码存在几处语法和逻辑问题:
- Liquid 中不能在
{% %}标签内部嵌套{{ }}标签 - 用
%a取到的是星期缩写字符串,无法直接和时间秒数做加法运算,要先把日期转成时间戳格式才能计算偏移 - 硬编码每个工作日的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
相关产品推荐
相关产品推荐

