Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Twig date difference

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?

like image 298
Stefan Braspenning Avatar asked Mar 27 '13 11:03

Stefan Braspenning


People also ask

How do you compare two dates in twig?

So that's how we can compare dates in Twig. The main thing is to get both dates in the same format and then compare. If you need specificity, you can use Epoch time; if you need less specificity, you can convert the date to a string and compare them that way.


2 Answers

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.

like image 109
Maks3w Avatar answered Sep 19 '22 12:09

Maks3w


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.

like image 45
Maerlyn Avatar answered Sep 21 '22 12:09

Maerlyn