Additionner des objets DateInterval
Bonjour,
Je rencontre le problème suivant : je cherche à additionner le contenu d'objets DateInterval sans y parvenir parfaitement.
Code:
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:
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