Shopify Liquid 找出一周中特定日期的日期

djf*_*lio 3 liquid shopify

想知道是否有人可以帮助解决有关 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 时间戳数学?

谢谢。

dri*_*rip 6

您将需要进行一些 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 数字相加,然后将其转换为可读的日期。

希望这很简单,可以遵循。

祝你有美好的一天!