35
31

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2013-06-02

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

ネット上だとよく以下のような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側に用意した方が良いとは思います。

あとはお好みでどうぞ。

35
31
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
35
31

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?