Convertir nombres de jours en An Mois Jours

Résolu/Fermé
Petit_Yio - 9 nov. 2016 à 10:00
 Toto - 9 nov. 2016 à 15:17
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

Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 525
9 nov. 2016 à 12:50
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
Bonjour,

Merci pour la solution en PHP ! Aurais-tu une solution pour twig (côté vue) ?
0
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 525
9 nov. 2016 à 14:53
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
Je vais tester cette solution !

Merci
0