Convertir nombres de jours en An Mois Jours [Résolu/Fermé]

Signaler
-
 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

Messages postés
2370
Date d'inscription
lundi 11 février 2013
Statut
Membre
Dernière intervention
10 mars 2020
430
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,
Bonjour,

Merci pour la solution en PHP ! Aurais-tu une solution pour twig (côté vue) ?
Messages postés
2370
Date d'inscription
lundi 11 février 2013
Statut
Membre
Dernière intervention
10 mars 2020
430
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
Je vais tester cette solution !

Merci