我正在Desk.com中构建一个“集成URL”,它使用Shopify Liquid Template过滤器语法。此网址需要包含查询的“开始日期”和“结束日期”,其中开始日期为7天前,结束日期为现在。
为了达到这个目的,我想我需要从'now'对象中减去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天前”的有效语法有何建议?非常感谢任何建议!
答案 0 :(得分:46)
非常感谢Desk.com“WOW”团队的@iveskev提供的答案:
如果执行{{'now'}}
,则返回字符串“now”而不是当前时间的时间戳。因此,如果您执行{{'now' | minus: 604800 }}
,则返回“-604800”,而不是当前的unix时间减去604800.当您使用date
过滤器时,液体将启动您引用当前时间并将时间输出为一个字符串。然而,即使我们“现在”输出当前日期,我们仍然从字符串中减去,因此将返回“-604800”。字符串上的数学运算正确的唯一时间是sting只是一个数字。
因此,为了获得正确的日期,我们首先必须获得unix时间戳,进行减法,然后重新格式化为所需的格式。您可以使用%s
来获取unix时间。因此,要获得unix中的当前时间,它将是:
{{'now' | date: '%s' }}
然后,您可以进行减法,然后以正确的方式格式化时间。我们可以在以下声明中一次完成所有这些:
{{'now' | date: "%s" | minus : 604800 | date: "%b %d, %Y %I:%M %p -0500" | uri_encode | replace:"+","%20"}}
答案 1 :(得分:0)
对于那些使用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存储库中发布了一个问题:https://github.com/harttle/liquidjs/issues/125