I've got an entity with a starting date and an ending date.
Is it possible to get the difference in time between them by using twig?
I've got an entity with a starting date and an ending date.
Is it possible to get the difference in time between them by using twig?
Since PHP 5.3 There is another option without to write an extension.
This example show how to calc the plural day/days
{# 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 %}
Explanation:
PHP 5.3 DateTime
object has diff()
method which return a DateInterval
object with the result difference between endDate
and beginDate
Twig
Twig date
function always return a DateTime
object so we can call diff
method
Finally we can access to the properties of the DateInterval
object or format it with the Twig date
filter.
Note: There is no need of wrap endDate
or startDate
with the date
function if the variable is already a DateTime
object.
Note2: DateTime
is used here as a synonym of DateTimeInterface
.
There's no built-in function to do that, but you can easily do it yourself, extending twig is easy!
The quick'n'easy way is to do it with twig's simple function class:
$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);
The reusable way is to create a twig extension (documented on the same link). That's still easy.
Also note there is an existing Date extension from Sensio Labs that offer a time_diff filter.
Then you can use it like this:{{ entity.ending_date|time_diff(entity.starting_date) }}