web-dev-qa-db-ja.com

日付計算/液体テンプレートフィルターでの操作

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日前」の有効な構文に関する提案はありますか?何かアドバイスをいただければ幸いです!

22
jonaz

@ 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"}}

49
jonaz

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

0
localhostdotdev