【问题标题】:Date Math / Manipulation in Liquid Template Filter液体模板过滤器中的日期数学/操作
【发布时间】:2014-01-30 04:08:49
【问题描述】:

我正在 Desk.com 中构建一个“集成 URL”,它使用 Shopify Liquid 模板过滤器语法。对于开始日期为 7 天前且结束日期为现在的查询,此 URL 需要包含“开始日期”和“结束日期”。

为了实现这一点,我认为我需要从“现在”对象中减去 7 天(纪元时间为 604800),然后应用我的格式,但我无法找出有效的语法。

对于当前时间,此语法有效且有效:

{{'now' | date: "%b %d, %Y %I:%M %p -0500" | uri_encode | replace:"+","%20"}}

7 天前,这是我能想到的最好的(不工作):

{{'now' | minus : 604800 | date: "%b %d, %Y %I:%M %p -0500" | uri_encode | replace:"+","%20"}}

对 Liquid 中“7 天前”的有效语法有何建议?非常感谢任何建议!

【问题讨论】:

    标签: date shopify liquid liquid-layout


    【解决方案1】:

    对于那些使用liquidjs的人,如果没有新的过滤器,我就找不到方法,所以我做了一个:

    daysAgo = (input) ->
      date = new Date()
      date.setDate(date.getDate() - parseInt(input, 10))
      date
    
    parser.registerFilter('days_ago', (value) -> daysAgo(value))
    

    然后做:

    {{ 1 | day_ago | date "%Y-%m-%d" }}
    2019-05-02
    

    我在liquidjs repo 上发布了一个问题:https://github.com/harttle/liquidjs/issues/125

    【讨论】:

      【解决方案2】:

      非常感谢来自 Desk.com “WOW” 团队的 @iveskev 的回答:

      如果您执行{{'now'}},它会返回字符串“now”而不是当前时间的时间戳。因此,如果您执行{{'now' | minus: 604800 }},它会返回“-604800”,而不是当前的 unix 时间减去 604800。当您使用date 过滤器时,液体会发现您正在引用当前时间并将时间作为字符串输出。然而,即使我们得到“现在”来输出当前日期,我们仍然会从字符串中减去,因此将返回“-604800”。只有当字符串只是一个数字时,字符串上的数学才能正确工作。

      因此,为了获得正确的日期,我们首先必须暂时获取 unix 时间戳,进行减法运算,然后重新格式化为所需的格式。您可以使用 %s 获取 unix 时间。因此,要在 unix 中获取当前时间,它将是: {{'now' | date: '%s' }}

      此时您可以进行减法运算,然后以正确的方式格式化时间。我们可以在下面的语句中一次性完成:

      {{'now' | date: "%s" | minus : 604800 | date: "%b %d, %Y %I:%M %p -0500" | uri_encode | replace:"+","%20"}}

      【讨论】:

      • 很棒的方法。这并不完全正确(可能因版本、渲染器等而异) - 您需要在引号中加上 now"now" | date: "%s" | minus : 604800
      • 谢谢,@ChrisHoughton。修改我的答案。
      • uri_encode 现在是url_encode,这也适用于液体宝石但不适用于液体js
      猜你喜欢
      • 2023-03-20
      • 2020-07-08
      • 1970-01-01
      • 1970-01-01
      • 2015-06-18
      • 2014-09-28
      • 1970-01-01
      • 1970-01-01
      • 2011-08-22
      相关资源
      最近更新 更多