Craft CMS でエントリの公開日から今日までの日数を取得する

先日、@tinybeans さんがポストされた、Craft CMS のテンプレートで diff を取得する方法。

Craft CMS で N 日以内のエントリーに NEW アイコンを付ける(日付の比較) | かたつむりくんのWWW
http://www.tinybeans.net/blog/2017/06/29-111012.html

とても便利ですよね。

必要に駆られて実際に試してみたところ、 postDateDiff.d が30を超えると0に戻り、 postDateDiff.m がカウントアップされることを知りました。そこで、単純にトータルの経過日数を取得する方法を調べてみました。

経過日数を取得する

日付フィールドの入力値を now と比較する場合、あらかじめ Y-m-d の書式に整形しておく必要があります。

{# エントリの投稿日を Y-m-d の書式で変数にセット #}
{% set entryPostDate = entry.postDate | date('Y-m-d') %}
{# 今日の日付と比較して経過日数を取得 #}
{% set diffDays = date( entryPostDate ).diff( now ).days %}

これで diffDays に経過日数にあたる数値がセットされます。
あとは、分岐処理などで利用しましょう。

{# 60日を過ぎたら、エラーメッセージを出力 #}
{% if diffDays > 60 %}
<p>60日を過ぎたため、閲覧できません。</p>
{% endif %}

閲覧者がログインしているかどうかの判定も絡めると、一般ユーザーに時限公開するコンテンツなども比較的簡単に用意できそうです。

参考

今回も Craft CMS Stack Exchange に助けてもらいました。

datetime - How to calculate the number of days left? - Craft CMS Stack Exchange
https://craftcms.stackexchange.com/questions/9756/how-to-calculate-the-number-of-days-left