テキストフィールドに入力した日付を比較してコンテンツを表示したい

{%- assign now = ‘now’ | date: ‘%s’ -%}
{%- assign startDate = ‘{{ block.settings.start-day | escape }}’ | date: ‘%s’ -%}
{%- assign endDate = ‘{{ block.settings.end-day | escape }}’ | date: ‘%s’ -%}
{%- if startDate < now and now < endDate -%}
コンテンツ表示
{%- endif -%}

テーマ設定のテキストフィールドに入力した日付を比較してコンテンツを表示非表示のリキッドを作っているのですが、テキストに入力した日付が反応していなくうまくいきません。

テキストフィールドにいれる文字例「2022/8/19 10:00:00」

テキストフィールドを使わず、インラインならうまく処理されます。

【日付をインラインの場合】

{%- assign now = ‘now’ | date: ‘%s’ -%}
{%- assign startDate = ‘2022/8/19 10:00:00’ | date: ‘%s’ -%}
{%- assign endDate = ‘2022/8/19 14:11:00’ | date: ‘%s’ -%}
{%- if startDate < now and now < endDate -%}
コンテンツ表示
{%- endif -%}

こんにちは。

Liquidでの表示がうまくいかない件についてですが、以下の点を確認してみてください。

(元のコード)

{%- assign startDate = ‘{{ block.settings.start-day | escape }}’ | date: ‘%s’ -%}> {%- assign endDate = ‘{{ block.settings.end-day | escape }}’ | date: ‘%s’ -%}

こちらですがLiquidのタグ内の変数がさらに波括弧で括られ、さらにクオーテーションで囲まれています。そのため現状startDateには’{{ block.settings.start-day | escape }}'という文字列が代入されてしまっています。

想定の挙動をさせるためには以下のように書く必要があります。

{%- assign startDate = block.settings.start-day | escape | date: ‘%s’ -%}> {%- assign endDate = block.settings.end-day | escape | date: ‘%s’ -%}

また、今回は関係ないかもしれませんが、blockのsettingsの値は特定のブロック( {%- for block in section.blocks -%}と{%- when ‘****’ -%}の中など)の中でしか利用できません。設定位置も改めて確認してみてください。

ちなみに余談ですがLiquidでの「時間」は実際の時間ではなく「レンダリングされた時間(Liquidのキャッシュが生成されたタイミングの時間)」が取得されます。そのためあまり正確な時間が必要な箇所には向いていませんのでご留意ください。