Brindille date différence
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 des brindilles?
3 réponses
depuis PHP 5.3 il y a une autre option sans écrire une extension.
Cet exemple montre comment calc 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
l'objet a diff()
méthode qui retourne un DateInterval
objet avec la différence de résultat entre endDate
et beginDate
Brindille
Twigdate
la fonction retourne toujours un DateTime
objet, nous pouvons donc appeler diff
méthode
Enfin, nous pouvons accéder aux propriétés de l' DateInterval
objet ou formater avec la brindille date
filtre.
Note: il n'y a pas besoin de wrap endDate
ou startDate
date
fonction si la variable est déjà un DateTime
objet.
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 faire vous-même, Extension de la brindille c'est facile!
la manière rapide et facile 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 de brindille (documentée sur le même lien). C'est toujours facile.
notez Également qu'il ya déjà un Date extension de Sensio Labs qui offrent un filtre time_diff.
Ensuite, vous pouvez l'utiliser comme ceci:{{ entity.ending_date|time_diff(entity.starting_date) }}