Date 液体模板过滤器中的日期数学/操作

Date 液体模板过滤器中的日期数学/操作,date,shopify,liquid,liquid-layout,Date,Shopify,Liquid,Liquid Layout,我正在Desk.com中构建一个“集成URL”,它使用Shopify Liquid模板过滤器语法。对于开始日期为7天前、结束日期为现在的查询,此URL需要包含“开始日期”和“结束日期” 为了实现这一点,我想我需要从'now'对象中减去7天(纪元时间为604800),然后应用我的格式,但我无法找到有效的语法 目前,此语法有效且有效: {{'now' | date: "%b %d, %Y %I:%M %p -0500" | uri_encode | replace:"+","%20"}} {{'n

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

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

目前,此语法有效且有效:

{{'now' | date: "%b %d, %Y %I:%M %p -0500" | uri_encode | replace:"+","%20"}}
{{'now' | minus : 604800 | date: "%b %d, %Y %I:%M %p -0500" | uri_encode | replace:"+","%20"}}
7天前,这里是我能想到的最好的(不起作用):

关于Liquid中“7天前”的有效语法有什么建议吗?非常感谢您的建议

非常感谢Desk.com“哇”团队的回答:

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

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

在这一点上,你可以做减法,然后以正确的方式格式化时间。我们可以在以下声明中一次完成这一切:


{'now'| date:“%s”|减:604800 | date:“%b%d,%Y%I:%M%p-0500”| uri|u encode |替换:“+”,“%20”}

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

daysAgo=(输入)->
日期=新日期()
date.setDate(date.getDate()-parseInt(输入,10))
日期
registerFilter('days\u ago',(value)->daysAgo(value))
然后做:

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

我在liquidjs回购协议上发布了一个问题:

很棒的方法。但这并不完全正确(可能因版本、渲染器等而异)-您需要在引号中添加
now
“now”| date:“%s”|减:604800
谢谢,@ChrisHoughton。修改我的答案。
uri\u encode
现在是
url\u encode
,这也适用于liquid gem,但不适用于liquidjs