Help us understand the problem. What is going on with this article?

twigでイケてるDateTimeの比較の仕方

More than 3 years have passed since last update.

意外とネット上にイケてる情報がないので書きます。

ネット上だとよく以下のようなdateフィルターを用いたイケてない文字列比較をやっちゃっているのを見かけます。

例)キャンペーンが開始していない場合

{% if campaign.startDate|date('Y-m-d') > "now"|date('Y-m-d') %}
まだ開始していません。
{% endif %}

もちろんこれでも動きます。動きますが、文字列の大小を比較するのは何かが違う気がします。最近のtwig(1.6以降)ではdate関数がありますし、スマートにDateTimeオブジェクト同士を比較すればいいと思います。
【参考】
twig date関数ドキュメント

{% if campaign.startDate > date() %}
まだ開始していません。
{% endif %}

Twigのdate関数のコードの実装を見てみると分かるのですが、内部的にDateTimeオブジェクトを生成しています。

また、twigのdate()引数を渡すとDateTimeにコンストラクター引数を渡すことになるので、「特定の日付より前なら」という条件文も簡単に書けます。

例)2013-06-02より前だったら表示

{% if campaign.startDate < date('2013-06-02 00:00:00') %}
まだ開始していません。
{% endif %}

ここまで書いておいてなんですが、テンプレート内で日時の比較を行う方法を紹介しましたが、もし他のところでも頻繁に使われる重要なロジックなのであれば、Campaign->isStarted() のようにpublicメソッドをEntity側に用意した方が良いとは思います。

あとはお好みでどうぞ。

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away