Shopifyのストア構築をしていて、現在の日付と他の日付を比較しなきゃいけないという状況になりました。
『特定の時刻』と『現在の時刻』があった際に
①『特定の日付』>『現在の日付』
②『特定の日付』<『現在の日付』
なのかを知りたい時に使える方法です。
ただ上記をやる際に単純に『2021-09-01』 という日付と『2021-09-12』という日付を直接比較することはできないので、下記にその方法を記述してみます。
Liquidで日付を取得する
まずLiquidで日付を取得する方法です。
例えば、記事の公開日を取得する際は、
{{ article.published_at | date: "%Y-%m-%d" }}
というように取得します。
このdateの部分で『%Y-%m-%d』とすると『2021-09-01』のようなフォーマットで出力されます。
希望なフォーマットがあれば、下記のサイトがとても参考になりました。
年、月、日、時間など、様々なフォーマットで出力することができます。
上記は記事を公開した日付ですが、他にも商品公開日時(product.created_at)や商品のmetafieldsに日付を追加して取得することも可能です。
ちなみに現在の日付の表示の仕方は下記になります。
{{'now' | date: '%Y-%m-%d' }}
と"now"を使用することで出力することができます。
Liquidで日付を比較する方法
Liquidで日付を取得する方法がわかったところで、早速日付を比較する方法に移っていきましょう。
日付の比較は『秒に換算して比較』します!
先ほども記載した通り「2021-09-01」といった日付フォーマットだと比較ができません。ただ「2021-09-01」という日付フォーマットを秒数の「1630501704」という秒数フォーマットに変換したらどうでしょう。
なんと比較できそうな感じがしませんか?
なので、例えば先ほどの記事の公開日だと
{{ article.published_at | date: "%Y-%m-%d" }}
と記載するのではなく%s(秒)を使用して
{{ article.published_at | date: "%s" }}
で出力するのです。
例えば、今日という日付が記事の公開日の前なのか、後なのかを判断するときは
{% assign today_second = 'now' | date: '%s' %}
{% assign article_published_second = article.published_at | date: '%s' %}
{% if today_second > article_published_second %}
(公開日よりも後だった場合の処理)
{% else %}
(公開日よりも前だった場合の処理)
{% endif %}
という形で比較することができます。
今回の場合は、そもそも記事の公開日よりも前である場合ってなかなかないので、あまり良い例ではありませんが、日付を比較する観点から見て参考になると嬉しいです!
Liquidで日付を取得して比較する方法 まとめ
以上、Liquidで日付を比較する方法でした。意外と秒数換算にして比較するって発想が出てくるまでに時間がかかってしまったので、メモ程度で記事にしてみました。
商品周りの制御で日付を使用した処理とかも利用する場面があるので、割と簡単に記述できて使い勝手良いなと個人的には思いました。
また使用できる日付フォーマット一覧もまとめたので、もし良ければご参考までに
[Shopify]Liquidで日付出力する際のフォーマット まとめ一覧
それでは最後までお読みいただき、ありがとうございました!本日も良い1日を!