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

Topic summary

テーマ設定のテキストフィールドに入力した日付をLiquidでUnixタイム(%s=秒単位のUnixタイム)に変換して比較し、コンテンツの表示/非表示を制御したいが、設定値だと反応しない問題。インラインで直接文字列を渡す場合は動作。

原因と修正案:

  • assignで変数を二重の波括弧とクオーテーションで囲んでおり、値ではなく文字列リテラル(‘{{ … }}’)が代入され、dateフィルターが効いていない。
  • 修正は、引用符と二重波括弧を外し「assign startDate = block.settings.start-day | escape | date: ‘%s’」「assign endDate = block.settings.end-day | escape | date: ‘%s’」のように記述。

補足注意点:

  • block.settingsは特定ブロックのコンテキスト(section.blocksのループ内やwhen節など)でのみ参照可能。設定のスコープを再確認すること。
  • Liquidの「now」はレンダリング時(キャッシュ生成時)の時刻であり、厳密なリアルタイム用途には不向き。

現状、原因の指摘と具体的な修正方針が提示。最終的な動作確認の報告はなく、解決は未確認で継続中。

Summarized with AI on February 11. AI used: gpt-5.

{%- 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のキャッシュが生成されたタイミングの時間)」が取得されます。そのためあまり正確な時間が必要な箇所には向いていませんのでご留意ください。