web-dev-qa-db-ja.com

Twig日付差

開始日と終了日を持つエンティティがあります。

小枝を使用してそれらの時間差を取得することは可能ですか?

21

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.3 DateTimeオブジェクトには diff() メソッドがあり、 DateIntervalendDatebeginDate Twigの結果が異なるオブジェクト

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

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

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

注2:ここではDateTimeDateTimeInterfaceの同義語として使用されます。

69
Maks3w

そのための組み込み関数はありませんが、自分で簡単に行うことができます。 extending twig は簡単です!

Quick'n'easyの方法は、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);

再利用可能な方法は、twig拡張機能(同じリンクに文書化されています)を作成することです。それでも簡単です。

13
Maerlyn

また、time_diffフィルターを提供するSensio Labsの既存の 日付拡張 があることに注意してください。

その後、次のように使用できます:{{ entity.ending_date|time_diff(entity.starting_date) }}

2