開始日と終了日を持つエンティティがあります。
小枝を使って時間差をつけることはできますか?
PHP 5.3以降、拡張機能を記述せずに別のオプションがあります。
この例は、複数の日/日を計算する方法を示しています
{# endDate and startDate are strings or DateTime objects #}
{% set difference = date(endDate).diff(date(startDate)) %}
{% set leftDays = difference.days %}
{% if leftDays == 1 %}
1 day
{% else %}
{{ leftDays }} days
{% endif %}
説明:
PHP 5.3DateTime
オブジェクトには、と
Twigの結果が異なるオブジェクトdiff()
を返すメソッドがあります。DateInterval
endDate
beginDate
Twigdate
関数は常にDateTime
オブジェクトを返すため、diff
メソッドを呼び出すことができます
最後に、オブジェクトのプロパティにアクセスしDateInterval
たり、Twigdate
フィルターを使用してフォーマットしたりできます。
注:変数がすでにオブジェクトである場合は、ラップendDate
または関数startDate
を使用する必要はありません。date
DateTime
注2:DateTime
ここでは。の同義語として使用されますDateTimeInterface
。
それを行うための組み込み関数はありませんが、自分で簡単に行うことができ、小枝を伸ばすのは簡単です!
簡単な方法は、twigの単純な関数クラスでそれを行うことです。
$function = new Twig_SimpleFunction('date_difference', function ($start, $end) {
// ... calculate difference and return it
});
// assuming $twig is an instance of Twig_Environment
$twig->addFunction($function);
再利用可能な方法は、小枝の拡張機能を作成することです(同じリンクに記載されています)。それでも簡単です。
また、time_diffフィルターを提供するSensioLabsの既存の日付拡張があることにも注意してください。
次に、次のように使用できます。{{ entity.ending_date|time_diff(entity.starting_date) }}
このプラグインは廃止され、Twig 3ではサポートされていないことに注意してください:https ://packagist.org/packages/twig/extensions
Symfony 5の場合、KnpTimeBundleを使用することをお勧めします
小枝機能を提供します|ago
インストールするには:composer require knplabs/knp-time-bundle