想知道是否有人可以帮助解决有关 Liquid / Shopify 的问题。我正在与一家每周四交付产品的商店合作,前提是您在同一周的周二中午 12 点前订购。
在给客户的通知中,我需要根据订单日期指明它将在哪个星期四发货,即“这个”或“下一个”。我已经通过以下逻辑在液体中实现了这一点:
{% if date | date: "%A" == 'Tuesday' and date | date: "%k" > 12 %}
Your order will be delivered on Thursday of next week.
{% elsif date | date: "%A" == 'Wednesday' or date | date: "%A" == 'Thursday' %}
Your order will be delivered on Thursday of next week.
{% else %}
Your order will be delivered this Thursday
{% endif %}
Run Code Online (Sandbox Code Playgroud)
以上暂时完成这项工作。但是,我的任务是实际发布星期四交货的“日期”。我绞尽脑汁,试图找出一种方法,我可以在液体中编写一个函数来告诉我“这个”星期四的日期是什么以及“下一个”星期四的日期是什么。但我来了王牌。我知道如何使用内置函数在 PHP 和 Ruby 中执行此操作,但我是 Liquid 的新手并且不认为它具有内置函数,因为它是一种标记语言(。所以我认为你必须做一些 unix 时间数学,但这使它变得非常复杂。
还有另一种方法,还是我必须求助于使用一些复杂的 unix 时间戳数学?
谢谢。
您将需要进行一些 unix 计算,但它们将是简单的计算。
请参阅下面的代码:
{% assign today = 'now' | date: '%s' %}
{% assign single_day = 86400 %}
{% assign today_number = 'now' | date: '%u' | plus: 0 %}
{% if today_number < 2 %}
Delivery by {{ today | plus: single_day | date: '%Y/%m/%d' }}
{% else %}
{% assign days_until_next = 9 | minus: today_number %}
{% assign days_unix = days_until_next | times: single_day %}
Delivery by {{ today | plus: days_unix | date: '%Y/%m/%d' }}
{% endif %}
Run Code Online (Sandbox Code Playgroud)
我会尝试分解它。
{% assign today = 'now' | date: '%s' %} - 有了这个,我们将获得服务器日期的当前 unix 时间戳
{% assign single_day = 86400 %} - 这是在 unix 时间戳中定义一天的数字
{% assign today_number = 'now' | date: '%u' | plus: 0 %}- 这会以数字形式返回当前日期 (1...7)。的plus: 0是将其转换为数字而不是一个字符串。
{% if today_number < 2 %}- 我们正在检查是否today_number小于 2(其中 2 是星期二),在这种情况下也可以这样写{% if today_number == 1 %},但是你明白了逻辑
如果上述条件为真,我们这样做:
{{ today | plus: single_day | date: '%Y/%m/%d' }}- 这将今天的时间戳和single_day时间戳相加,给我们明天的日期
如果 if 语句返回 false,我们将进入{% else %}设置几个变量的语句。
{% assign days_until_next = 9 | minus: today_number %}- 因为我们从第二天开始计算,所以我使用数字 9 作为基数并减去当前值today_number,例如,如果今天是星期二,我们有 2 和9-2=7,所以这意味着下一个星期二是从现在起 7 天。
{% assign days_unix = days_until_next | times: single_day %}- 这只是计算单日的 unix 数乘以到下周二的天数。所以如果我们继续上面周二的例子,你会得到86400*7=604800
{{ today | plus: days_unix | date: '%Y/%m/%d' }} - 最后,我们将今天的 unix 数字与直到下周二的那几天的 unix 数字相加,然后将其转换为可读的日期。
希望这很简单,可以遵循。
祝你有美好的一天!