Si tengo dos variables $startDate="YYYYmmdd"
y $endDate="YYYYmmdd"
, ¿cómo puedo obtener el número de días entre ellas, por favor?PHP obtener días entre la fecha de inicio y la fecha final
Gracias.
Si tengo dos variables $startDate="YYYYmmdd"
y $endDate="YYYYmmdd"
, ¿cómo puedo obtener el número de días entre ellas, por favor?PHP obtener días entre la fecha de inicio y la fecha final
Gracias.
Si está usando PHP 5.3, puede utilizar la nueva clase DateTime
:
$startDate = new DateTime("20101013");
$endDate = new DateTime("20101225");
$interval = $startDate->diff($endDate);
echo $interval->days . " until Christmas"; // echos 73 days until Christmas
Si no es así, deberá usar strtotime
:
$startDate = strtotime("20101013");
$endDate = strtotime("20101225");
$interval = $endDate - $startDate;
$days = floor($interval/(60 * 60 * 24));
echo $days . " until Christmas"; // echos 73 days until Christmas
Las nuevas DateTime, DateTimeInterval, DateTimePeriod y DateTimeZone-classes simplemente rockearon. También hice algo de experiencia con ellos. Creo que es mejor que strtotime, ya que considera años bisiestos, segundos súbitos, etc. Así que +1 para ti. También di un ejemplo más detallado en esta publicación: http://stackoverflow.com/questions/3108591/calculate-number-of-hours-between-2-dates-in-php/3108800#3108800 –
Gracias, lonesomeday. – Francisc
$DayDiff = strtotime("2010-01-12")-strtotime("2009-12-30");
echo date('z', $DayDiff)." Days";
éste debe ser precisa y utilizable con PHP < 5.2
Aquí es el código de ejemplo
$startDate = mktime(0,0,0,1,1,2010);
$endDate = mktime(0,0,0,12,1,2010);
$dateDiff = $date1 - $date2;
$fullDays = floor($dateDiff/(60*60*24));
echo "Differernce is $fullDays days";
<?php
$time1=strtotime($startDate);
$time2=strtotime($endDate);
$daycount=floor(($time2-$time1)/ 86400);
?>
<?php
function days($date1, $date2) {
$date1 = strtotime($date1);
$date2 = strtotime($date2);
return ($date2 - $date1)/(24 * 60 * 60);
}
$date1 = '20100820';
$date2 = '20100930';
echo days($date1, $date2);
?>
La manera más fácil que he encontrado para obtener el número de días entre ellas es mediante la conversión de las fechas de inicio y de marcas de tiempo Unix y haciendo una de resta en ellos.
Luego, si desea formatear la fecha, vuélvala a convertir utilizando la función de fecha de PHP.
Este es mi enfoque, basado en una búsqueda brutal en la mayoría de los casos, solo porque las divisiones por segundos (por semanas, meses, años) pueden no arrojar resultados precisos, como cuando se trabaja con años bisiestos, por ejemplo.
<?php
function datediff($timeformat, $startdate, $enddate)
{
$unix_startdate = strtotime($startdate) ;
$unix_enddate = strtotime($enddate) ;
$min_date = min($unix_startdate, $unix_enddate);
$max_date = max($unix_startdate, $unix_enddate);
$Sd = date("d", $unix_startdate) ;
$Sm = date("m", $unix_startdate) ;
$Sy = date("Y", $unix_startdate) ;
$Ed = date("d", $unix_enddate) ;
$Em = date("m", $unix_enddate) ;
$Ey = date("Y", $unix_enddate) ;
$unixtimediff = $unix_enddate - $unix_startdate ;
if ($unixtimediff <= 0) return -1 ;
switch(strtolower($timeformat))
{
case "d": // days
$divisor = 3600 * 24 ;
return floor($unixtimediff/$divisor) + 1 ;
break ;
case "w": // weeks
$i = 0 ;
while (($min_date = strtotime("+1 DAY", $min_date)) <= $max_date) $i++;
return floor($i/7) ;
break ;
case "m": // months
$i = $Sd != $Ed && $Sm != $Em ? 1 : 0 ;
while (($min_date = strtotime("+1 MONTH", $min_date)) <= $max_date) $i++;
return $i ;
break ;
case "q": // quaterly (3 months)
$i = $Sd != $Ed && $Sm != $Em ? 1 : 0 ;
while (($min_date = strtotime("+3 MONTH", $min_date)) <= $max_date) $i++;
return $i ;
break ;
case "y": // year
$i = $Sd != $Ed && $Sm != $Em ? 1 : 0 ;
while (($min_date = strtotime("+1 MONTH", $min_date)) <= $max_date) $i++;
return floor($i/12) ;
break ;
}
}
$startdate = "2014-01-01" ;
$enddate = "2015-12-31" ;
$formats = array("d" => "days", "w" => "weeks", "m" => "months", "q" => "quaterly", "y" => "years") ;
foreach($formats AS $K => $F)
echo "From $startdate to $enddate in $F format: ". datediff("$K", $startdate, $enddate)."<br>" ;
?>
favor indique si desea que el número de días inclusivos o exclusivos de las dos fechas. – stillstanding
Incluyendo el inicio y el final, gracias. – Francisc