【问题标题】:Date comparison Logic / in Liquid Filter日期比较逻辑/液体过滤器
【发布时间】:2020-01-09 19:02:53
【问题描述】:

我正在尝试将 30 天添加到预订日期,如果今天的日期更晚,则显示一个文本字符串,如果不显示另一个文本字符串。有什么想法我哪里出错了吗?

{% assign assign pre_date = 259200 | plus: order.created_at | date: '%s' %}
{% assign today_date = 'now' | date: '%s' %}
{% if pre_date > today_date %}
disply this
{% else %}
this
{% endif %}

【问题讨论】:

  • 如果打印{% assign assign pre_date = 259200 | plus: order.created_at | date: '%s' %}的结果会得到什么?操作是从左到右执行的,因此它试图获取您的基本偏移量并添加任何 order.created_at (可能不是数字,因此可能返回0),然后将该结果转换为日期输入-秒。我有一种感觉,您想将顺序更改为order.created_at | date: '%s' | plus: 259200,这样您肯定会在字符串中添加一个数字,即可以强制转换为数字。 :)
  • 另外,由于date 过滤器返回一个字符串,您可能需要使用{% assign today_date = 'now' | date: '%s' | times: 1 %}today_date 强制转换为整数,以使比较正常工作
  • 感谢 Dave,添加时间:1 成功了!
  • 太棒了!我会将其添加为实际答案,以便您可以将此问题标记为已解决:D

标签: date shopify liquid liquid-layout


【解决方案1】:

date 过滤器会返回一个字符串,即使您使用 %s 来获取秒数也是如此,因此 Shopify 可能会遇到这样的情况:您正在比较看起来像数字的字符串而不是实际数字

为了将变量强制转换为正确的数值,我发现最简单的方法是应用中性数学运算(| plus: 0| times: 1

所以您的最终代码可能类似于:

{% assign pre_date = order.created_at | date: '%s' | plus: 259200 %}
{% assign today_date = 'now' | date: '%s' | times: 1 %}

{% if pre_date > today_date %}
  Pre-date is greater
{% else %}
  Today is the day
{% endif %}

【讨论】:

    猜你喜欢
    • 2018-05-14
    • 2011-10-28
    • 2020-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多