日期比较逻辑 / 在Liquid模板过滤器中

14
我将尝试创建一个“预订”类似机制,其中我的Shopify Liquid模板的某些元素仅在当前日期早于或晚于Metafield中指定的日期时显示。
目前,以下是我的逻辑和代码:
<!-- Check Today is correct -->
<p>Today: {{'now' | date: '%d-%m-%Y' }}</p>

<!-- This is the Metafield Output as a String -->
<p>Release Date: {{ product.metafields.Release-Date.preOrder }}</p>

<!-- Assign Variable "today_date" to the current date -->
{% assign today_date = 'now' | date: '%d-%m-%Y' %}
<!-- Assign Variable "pre_date" to the string of the metafield -->
{% assign pre_date = product.metafields.Release-Date.preOrder %}
{% if today_date > pre_date %}
  Today's date is greater than PreOrder Date
{% else %}
  Today's date is not greater than PreOrder Date
{% endif %}

然而,即使我将预订日期设置为01-01-2018,它仍然显示“大于”。

我该如何正确查询?

1个回答

30

这种比较字符串的方式是错误的。(这些日期是字符串。)

你必须使用 %s 日期过滤器。

因此,它将变成:

{% assign today_date = 'now' | date: '%s' %}
{% assign pre_date = product.metafields.Release-Date.preOrder | date: '%s' %}
{% if today_date > pre_date %}

我们使用 %s,因为它会返回当前的 Unix 时间戳数值,而不是字符串。这样你就能够比较不同的时间戳。


这非常完美,而且非常有道理,我真的很感谢你的解释 :-) - Bradly Spicer
2
请注意,对于一些日期比较,您可能需要将其转换为数字。因此,我建议在两个赋值语句中使用“date:'%s' | times:1”。 - cfx
@cfx,如果需要将其转换为数字,您可以提供一个示例吗?据我所知,UNIX时间戳始终是递增的(甚至按字符串字母顺序)。例如,当前的UNIX时间戳是1663582748289。如果我从开头删除1,我将得到1991年的日期。这就是您所说的情况吗? - Viktor
@Viktor 抱歉,我不记得我当时想到的例子了...那是很久以前的事了。 - cfx

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接