64 votes

Manière élégante d'obtenir le nombre de mois entre deux dates ?

Supposons que j'ai deux dates dans les variables, comme

 $date1 = "2009-09-01";
$date2 = "2010-05-01";

J'ai besoin d'obtenir le nombre de mois entre $date2 et $date1 ( $date2 >= $date1 ). C'est-à-dire que j'ai besoin d'obtenir 8 .

Existe-t-il un moyen de l'obtenir en utilisant la fonction date , ou je dois exploser mes chaînes et effectuer les calculs requis ?

Merci.

35voto

Chuck Burgess Points 8060

Ou, si vous voulez le style procédural :

 $date1 = new DateTime("2009-09-01");
$date2 = new DateTime("2010-05-01");
$interval = date_diff($date1, $date2);
echo $interval->m + ($interval->y * 12) . ' months';

MISE À JOUR : Ajout du bout de code pour comptabiliser les années.

20voto

Mic Points 201

Ou un simple calcul donnerait :

 $numberOfMonths = abs((date('Y', $endDate) - date('Y', $startDate))*12 + (date('m', $endDate) - date('m', $startDate)))+1;

Précis et fonctionne dans tous les cas.

4voto

Jesus Velazquez Points 51

Voici une autre façon d'obtenir le nombre de mois entre deux dates :

 // Set dates
$dateIni = '2014-07-01';
$dateFin = '2016-07-01';

// Get year and month of initial date (From)
$yearIni = date("Y", strtotime($dateIni));
$monthIni = date("m", strtotime($dateIni));

// Get year an month of finish date (To)
$yearFin = date("Y", strtotime($dateFin));
$monthFin = date("m", strtotime($dateFin));

// Checking if both dates are some year

if ($yearIni == $yearFin) {
   $numberOfMonths = ($monthFin-$monthIni) + 1;
} else {
   $numberOfMonths = ((($yearFin - $yearIni) * 12) - $monthIni) + 1 + $monthFin;
}

3voto

manix Points 2396

J'utilise ceci :

 $d1 = new DateTime("2009-09-01");
$d2 = new DateTime("2010-09-01");
$months = 0;

$d1->add(new \DateInterval('P1M'));
while ($d1 <= $d2){
    $months ++;
    $d1->add(new \DateInterval('P1M'));
}

print_r($months);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X