11

その行に関連付けられた日付が30日未満の場合、小枝を使用してテーブルの行にフラグを立てています。

Twig のドキュメントには、2 つの日付オブジェクトを比較するには、最初にオブジェクトを日付に変換してから、次のように比較する必要があると記載されています。

{% if date(yourDate) < date(-'30days') %} ... {% endif %}

ただし、比較の左側に日付形式を渡す方法は指定されていません。Twig の日付関数は、PHP の日付のラッパーのようなものであることを理解しています。

PHP では、通常次のように呼び出します。

$myDate = \DateTime::createFromFormat("m/d/Y", $myDate);

しかし、Twig では、別の形式に変換するために元の日付の形式を指定する方法がないか、少なくともドキュメントには記載されていないようです。

これは私が試したことです:

{% if date(d.LastDate) > date('-30days') %}...{% endif %}

{% if d.LastDate | format("Y-m-d") > date('-30days') %}...{% endif %}

{% if date("m/d/Y", d.LastEmailSentDate) > date('-30days') %}...{% endif %}

これらの条件とそのバリエーションは、Symfony2 で次の例外を返します。

 An exception has been thrown during the rendering of a template 
("DateTimeZone::__construct(): Unknown or bad timezone (---)")

私のコントローラーは次の形式で日付を返しています。m/d/Yその日付が 30 日未満の場合、その行にフラグを立てたいだけです。

4

3 に答える 3

28

Unix エポック (PHP 日付形式U)からの秒数を取得して、2 つの日付を比較します。

{% if d.LastDate|date("U") > "-30 days"|date("U") %}
    <p>Less than 30 days old</p>
{% endif %}
于 2013-11-04T16:17:26.530 に答える
18

Twig 1.6日付比較をサポートします。

{% if date(d.LastDate) > date("-30 days") %}
    <p>Less than 30 days old</p>
{% endif %}

{% if date(d.LastDate) > date("now") %}
    <p>Future date</p>
{% endif %}

http://twig.sensiolabs.org/doc/functions/date.html

于 2014-02-14T08:12:27.263 に答える
3

PHP 5.3 以降より正確な方法があります。

{# endDate and startDate are strings or DateTime objects #}
{% set difference = date(endDate).diff(date(startDate)) %}
{% set leftDays = difference.days %}
{% if leftDays > 30 %}
  Less than 30 days old
{% else %}
  More than 30 days old
{% endif %}

説明:

PHP 5.3DateTimeオブジェクトには、と Twigの結果の違いを持つオブジェクトdiff()を返すメソッドがあります。DateIntervalendDatebeginDate

Twigdate関数は常にDateTimeオブジェクトを返すため、diffメソッドを呼び出すことができます

最後に、オブジェクトのプロパティにアクセスしDateIntervalたり、Twig 日付フィルターでフォーマットしたりできます。

注: 変数が既に DateTime オブジェクトである場合は、endDate または startDate を date 関数でラップする必要はありません。

注 2:DateTimeここでは、 の同義語として使用されますDateTimeInterface

于 2014-11-29T17:48:31.283 に答える