Convertir nombres de jours en An Mois Jours

Résolu
Petit_Yio -  
 Toto -
Bonjour,

J'aimerai convertir un nombre de jours en An Mois Jours dans une vue twig.

Exemple :

Statut expiré depuis {{ jour_Restant - 365 }} jours cela donne : Statut expiré depuis 1828 jours.

Je voudrai que 1828 jours devienne "depuis X an(s) X mois X jour(s).

Je rappelle que je souhaite faire ça en PHP si c'est préférable de le faire dans le contrôleur ou twig si c'est préférable de le faire dans la vue.

1 réponse

  1. Pitet Messages postés 2845 Statut Membre 530
     
    Salut,

    Une solution possible en utilisant le modulo :
    $nombreJours = 1828;
    
    $annees = intval($nombreJours / 365);
    $jours = intval(($nombreJours % 365));
    $mois = intval($jours / 30);
    
    echo "$annees annees $mois mois $jours jours";
    


    Néanmoins cette première solution n'est pas précise (pas de gestion des années bissextile, on considère que tous les mois font 30 jours...).

    Une autre solution plus précise est d'utiliser la classe DateTime :
    $start_date = new DateTime(date("Y/m/d"));
    $end_date = new DateTime(date("Y/m/d",strtotime("-1828 days")));
    $dd = date_diff($start_date,$end_date);
    
    echo "$dd->y years $dd->m months $dd->d days";
    


    Bonne journée,
    0
    1. Toto
       
      Bonjour,

      Merci pour la solution en PHP ! Aurais-tu une solution pour twig (côté vue) ?
      0
    2. Pitet Messages postés 2845 Statut Membre 530
       
      Je ne connais pas bien twig mais la première solution devrait facilement pouvoir être reprise (utilisation du filtre number_format à la place de intval), par exemple :
      Années : {{ ($nombreJours / 365)|number_format(0, ',', ' ') }}
      Mois : {{ (($nombreJours % 365) / 30)|number_format(0, ',', ' ') }}
      Jours : {{ ($nombreJours % 365)|number_format(0, ',', ' ') }}

      Pour la solution avec DateInterval, une méthode est proposé ici : http://watermelon-pixels.fr/blog/calculer-une-intervalle-de-temps-avec-twig
      0
    3. Toto
       
      Je vais tester cette solution !

      Merci
      0