33

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

小枝を使って時間差をつけることはできますか?

4

4 に答える 4

86

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()を返すメソッドがあります。DateIntervalendDatebeginDate

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

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

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

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

于 2014-11-29T17:44:04.577 に答える
13

それを行うための組み込み関数はありませんが、自分で簡単に行うことができ、小枝を伸ばすのは簡単です!

簡単な方法は、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);

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

于 2013-03-27T18:20:08.867 に答える
3

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

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

このプラグインは廃止され、Twig 3ではサポートされていないことに注意してください:https ://packagist.org/packages/twig/extensions

于 2015-11-09T15:09:25.300 に答える
2

Symfony 5の場合、KnpTimeBundleを使用することをお勧めします

小枝機能を提供します|ago

インストールするには:composer require knplabs/knp-time-bundle

于 2021-05-06T14:53:50.140 に答える