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?

17
demandé sur Kara 2013-03-27 15:25:52

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 startDatedate fonction si la variable est déjà un DateTime objet.

Note2:DateTime est utilisé ici comme synonyme de DateTimeInterface.

61
répondu Maks3w 2015-02-19 00:43:13

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.

13
répondu Maerlyn 2013-03-27 18:21:11

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) }}

2
répondu Vincent Pazeller 2017-07-10 12:10:09