Bonjour,

Je rencontre le problème suivant : je cherche à additionner le contenu d'objets DateInterval sans y parvenir parfaitement.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
// premier intervalle : 7 mois et 17 jours
$intervalle1 = new DateInterval('P7M17D');
 
// second intervalle : 11 mois
$intervalle2 = new DateInterval('P11M');
Logiquement, en additionnant de tête les intervalles de temps, j'aboutis à un total de 1 an, 6 mois et 17 jours.

Or, lorsque je les ajoute l'un après l'autre à une date de départ, je perds curieusement un jour :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
// J'ajoute à une première date les deux intervalles en question
$date = new DateTime('2015-01-01');
 
$date_nouvelle = new DateTime($date->format('Y-m-d'));
 
$date_nouvelle = $date_nouvelle->add($intervalle1);
 
$date_nouvelle = $date_nouvelle->add($intervalle2);
 
// Afin d'obtenir l'intervalle total je soustrais les deux dates
 
$intervalleTotal = $date->diff($date_nouvelle);
 
echo $intervalleTotal->format('%yA %mM %dJ');
L'intervalle total calculé et affiché est en effet 1 an, 6 mois et 16 jours.

Comment se fait-il qu'un jour ait été retranché ? Le plus curieux, c'est que la méthode de calcul semble varier selon la date de départ ($date) et les intervalles définis. Avec certaines données le calcul sera juste, avec d'autres j'aurai un ou plusieurs jours de décalage.

Existe-t-il une méthode plus fiable pour additionner des intervalles ?

Je vous remercie d'avance pour vos lumières.

GB