Shopify Liquidテンプレートフィルター構文を使用する「統合URL」をDesk.comで構築しています。このURLには、クエリの「開始日」と「終了日」が含まれている必要があります。開始日は7日前で、終了日は現在です。
これを達成するには、「今」オブジェクトから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日前」の有効な構文に関する提案はありますか?何かアドバイスをいただければ幸いです!
@ iveskev この回答をDesk.comの「WOW」チームから感謝します:
{{'now'}}
を実行すると、現在のタイムスタンプではなく文字列「now」が返されます。したがって、{{'now' | minus: 604800 }}
を実行すると、現在のUNIX時間から604800を引いた値ではなく、「-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"}}
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