J'ai une entité avec une date de début et une date de fin.
Est-il possible d'obtenir la différence de temps entre eux en utilisant une brindille?
Depuis PHP 5.3 Il existe une autre option sans écrire une extension.
Cet exemple montre comment calculer le pluriel jour/jours
{# 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 %}
Explication:
PHP 5.3 DateTime
objet a une méthode diff()
qui retourne un objet DateInterval
avec la différence de résultat entre endDate
et beginDate
Twig
Twig date
la fonction retourne toujours un objet DateTime
afin que nous puissions appeler la méthode diff
Enfin, nous pouvons accéder aux propriétés de l'objet DateInterval
ou le formater avec le filtre Twig date
.
Remarque: Il n'est pas nécessaire d'envelopper endDate
ou startDate
avec la fonction date
si la variable est déjà un objet DateTime
.
Note2: DateTime
est utilisé ici comme synonyme de DateTimeInterface
.
Il n'y a pas de fonction intégrée pour le faire, mais vous pouvez facilement le faire vous-même, extension de la brindille est facile!
La manière rapide et simple est de le faire avec la classe de fonction simple de 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);
La manière réutilisable est de créer une extension twig (documentée sur le même lien). C'est toujours facile.
Notez également qu'il existe un Extension de date de Sensio Labs qui propose un filtre time_diff.
Ensuite, vous pouvez l'utiliser comme ceci: {{ entity.ending_date|time_diff(entity.starting_date) }}