Mam podmiot z datą początkową i datą końcową.Różnica daty gałązki
Czy można uzyskać różnicę w czasie między nimi za pomocą gałązki?
Mam podmiot z datą początkową i datą końcową.Różnica daty gałązki
Czy można uzyskać różnicę w czasie między nimi za pomocą gałązki?
Nie ma wbudowanej funkcji do tego, ale można to łatwo zrobić samodzielnie, extending twig jest łatwe!
quick'n'easy sposobem jest zrobić to z prostego klasy funkcji gałązka za:
$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);
wielokrotnego użytku sposobem jest stworzenie rozszerzenia gałązka (udokumentowaną na tym samym łączu). To nadal jest łatwe.
Od PHP 5.3 Istnieje inna opcja bez pisania rozszerzenia.
Ten przykład pokazuje, jak calc mnogiej dzień/dni
{# 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 %}
Objaśnienie:
PHP 5.3 DateTime
obiekt ma diff()
metodę, która zwracać DateInterval
obiekt z różnicy wyników pomiędzy endDate
i beginDate
Twig
Twig date
funkcja zawsze zwraca wartość DateTime
obiekt, więc możemy nazwać diff
metoda
Wreszcie możemy uzyskać dostęp do właściwości obiektu DateInterval
lub sformatować go z filtrem Twig date
.
Uwaga: Nie ma potrzeby opasania endDate
lub startDate
z funkcją date
jeśli zmienna jest już DateTime
przedmiot.
Uwaga 2: DateTime
jest tutaj używany jako synonim nazwy DateTimeInterface
.
Należy również pamiętać, że istnieje istniejący Date extension od Sensio Labs, który oferuje filtr time_diff.
Wtedy można go używać tak: {{ entity.ending_date|time_diff(entity.starting_date) }}
To działa jak marzenie, ale jeśli różnica pomiędzy datami będzie więcej niż miesiąc, stosowanie .days zamiast .d, .D tylko zwraca część dni, tzn. jeśli różnica wynosi 1 miesiąc, 1 dzień, .d będzie 1, ale dzień będzie wynosił 32 (przy założeniu 31 dniowego miesiąca). '{% zestaw leftDays = difference.days%}' –
Aby otrzymać datę urodzin {{date(). Diff (data (item.birth)). Y}} – dikirill
Ale zarówno pozycja daty początkowej i końcowej spowoduje w jeden dzień. Jak ustalić, czy jest to jeden dzień w lewo (+1), czy jeden dzień nad (-1) ??? – Pathros