2010-09-06 3 views
14

Si j'ai un couple de chaînes $ startDate et $ endDate qui sont définies par (par exemple) "2011/07/01" et "2011/07/17" (ce qui signifie 1 Juillet 2011 et 17 Juillet 2011). Comment devrais-je compter les jours entre la date de début et la date de fin? Dans l'exemple donné, ce serait 17 jours.Comment compter les jours entre deux dates en PHP?

+0

voir http://stackoverflow.com/questions/2040560/find-the-number-of-days-between-two-dates –

Répondre

34

Voici la façon brute de le faire

$startTimeStamp = strtotime("2011/07/01"); 
$endTimeStamp = strtotime("2011/07/17"); 

$timeDiff = abs($endTimeStamp - $startTimeStamp); 

$numberDays = $timeDiff/86400; // 86400 seconds in one day 

// and you might want to convert to integer 
$numberDays = intval($numberDays); 
+4

Ne fonctionne pas correctement lorsque vous avez des dates locales qui incluent un basculement de temps d'épargne dayling, car à ces dates vous avez des jours avec 23 ou 25 heures. –

+0

Merci.Apparaît pour travailler pour moi. – cannyboy

+0

En fait, il est dit 16 jours pour ces dates .. Ai-je besoin de faire des dates ignorer l'heure d'été ..? – cannyboy

3

PHP dispose d'une fonction date_diff() pour cela.

30

Use DateTime::diff (aka date_diff):

$datetime1 = new DateTime('2009-10-11'); 
$datetime2 = new DateTime('2009-10-13'); 
$interval = $datetime1->diff($datetime2); 

Ou:

$datetime1 = date_create('2009-10-11'); 
$datetime2 = date_create('2009-10-13'); 
$interval = date_diff($datetime1, $datetime2); 

Vous pouvez alors obtenir l'intervalle comme un entier en appelant $interval->days.

+0

Cela ne semble pas fonctionner avec mes initiales "2011/07/01" et "2011/07/17" ... "Appel à fonction indéfinie date_diff() .. ". J'utilise PHP 5.2.10 – cannyboy

+4

Par la documentation (liée en haut), c'est PHP> = 5.3.0. Pour la prochaine fois, veuillez inclure la version de PHP dans votre question. – wuputah

+0

ne fonctionne que si vous n'avez pas de temps dans vos dates, sinon il peut revenir 1-2 jours à quelques – Dukeatcoding

1

Aucune des solutions a fonctionné pour moi. Pour ceux qui sont encore sur PHP 5.2 (DateTime :: diff a été introduit en 5.3), cette solution fonctionne:

function howDays($from, $to) { 
    $first_date = strtotime($from); 
    $second_date = strtotime($to); 
    $offset = $second_date-$first_date; 
    return floor($offset/60/60/24); 
} 
3

Dans le cas où votre DateTime a également heures: minutes: secondes et vous voulez toujours avoir le nombre de jours ..

/** 
    * Returns the total number of days between to DateTimes, 
    * if it is within the same year 
    * @param $start 
    * @param $end 
    */ 
    public function dateTimesToDays($start,$end){ 
     return intval($end->format('z')) - intval($start->format('z')) + 1; 
    } 

https://github.com/dukeatcoding/timespan-converter

0

Si vous voulez connaître le nombre de jours (le cas échéant), le nombre d'heures (le cas échéant), minutues (le cas échéant) et secondes, vous pouvez effectuer les opérations suivantes:

$previousTimeStamp = strtotime("2011/07/01 21:12:34"); 
$lastTimeStamp = strtotime("2013/09/17 12:34:11"); 

$menos=$lastTimeStamp-$previousTimeStamp; 

$mins=$menos/60; 
if($mins<1){ 
$showing= $menos . " seconds ago"; 
} 
else{ 
$minsfinal=floor($mins); 
$secondsfinal=$menos-($minsfinal*60); 
$hours=$minsfinal/60; 
if($hours<1){ 
$showing= $minsfinal . " minutes and " . $secondsfinal. " seconds ago"; 

} 
else{ 
$hoursfinal=floor($hours); 
$minssuperfinal=$minsfinal-($hoursfinal*60); 
$days=$hoursfinal/24; 
if($days<1){ 
$showing= $hoursfinal . "hours, " . $minssuperfinal . " minutes and " . $secondsfinal. " seconds ago"; 

} 
else{ 
$daysfinal=floor($days); 
$hourssuperfinal=$hoursfinal-($daysfinal*24); 
$showing= $daysfinal. "days, " .$hourssuperfinal . " hours, " . $minssuperfinal . " minutes and " . $secondsfinal. " seconds ago"; 
}}} 

echo $showing; 

Vous pouvez utiliser le même logique si vous voulez ajouter des mois et des années.

0

Une façon simple de compter est

$currentdate = date('Y-m-d H:i:s'); 
$after1yrdate = date("Y-m-d H:i:s", strtotime("+1 year", strtotime($data))); 

$diff = (strtotime($after1yrdate) - strtotime($currentdate))/(60 * 60 * 24); 

echo "<p style='color:red'>The difference is ".round($diff)." Days</p>"; 
-1

Vous pouvez utiliser date_diff pour calculer la différence entre deux dates:

$date1 = date_create("2013-03-15"); 
$date2 = date_create("2013-12-12"); 
$diff = date_diff($date1 , $date2); 
echo $diff->format("%R%a days"); 
0
$date1 = date_create("2017-04-15"); 
$date2 = date_create("2017-05-18"); 

//difference between two dates 
$diff = date_diff($date1,$date2); 

//count days 
echo 'Days Count - '.$diff->format("%a"); 
Questions connexes