2010-09-06 21 views
14

Si tengo un par de cadenas $ startDate y $ endDate que están configuradas (por ejemplo) "2011/07/01" y "2011/07/17" (es decir, el 1 de julio de 2011 y el 17 de julio de 2011). ¿Cómo contaría los días desde la fecha de inicio hasta la fecha de finalización? En el ejemplo dado, serían 17 días.¿Cómo contar días entre dos fechas en PHP?

+0

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

Respuesta

34

Esta es la forma en bruto para hacerlo

$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

No funcionará correctamente cuando tenga fechas locales que incluyan una conmutación de horario de ahorro diurno, porque en esas fechas tiene días con 23 o 25 horas. –

+0

Gracias.Parece que funciona para mí. – cannyboy

+0

En realidad, dice 16 días para esas fechas. ¿Debo hacer que las fechas ignoren el horario de verano? – cannyboy

3

PHP tiene una función date_diff() para hacer esto.

30

Use DateTime::diff (también conocido como date_diff):

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

O:

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

entonces se puede obtener el intervalo como un entero llamando $interval->days.

+0

Eso no parece funcionar con mis cadenas iniciales de "2011/07/01" y "2011/07/17" ... "Llamar a función indefinida date_diff() .. ". Estoy usando PHP 5.2.10 – cannyboy

+4

Según la documentación (vinculada en la parte superior), esto es PHP> = 5.3.0. Para la próxima vez, incluya la versión de PHP en su pregunta. – wuputah

+0

solo funciona si no tiene un horario en su horario. De lo contrario, puede devolver de 1 a 2 días a unos pocos – Dukeatcoding

1

Ninguna de las soluciones que funcionó para mí. Para aquellos que todavía están en PHP 5.2 (DateTime :: diff se introdujo en 5.3), esta solución funciona:

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

En caso de que su DateTime tiene también horas: minutos: segundos y todavía quieren tener el número de días ..

/** 
    * 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 desea conocer el número de días (si lo hay), el número de horas (si lo hay), minutues (si existe) y segundo, puede hacer lo siguiente:

$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; 

podría utilizar el mismo lógica si quieres agregar meses y años.

0

Una manera sencilla de contar decir,

$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

Puede utilizar date_diff para calcular la diferencia entre dos fechas:

$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"); 
Cuestiones relacionadas