Existe un error en el codigo, la funcion floor no redondea correctamente, la correcta seria la funcion round.
Este script lo prueba
<?php
$FechaIn="2008-12-31";//colocar un dia antes de la fecha del equipo donde se vaya a probar
$fecha_in_reserva = strtotime($FechaIn);//pasamos fecha a formato unix
for($n=0;$n<=365;$n++)
{
$FechaOut =date("Y-m-d", mktime(0, 0, 0, date("m") , date("d")+$n, date("Y")));
$fecha_out_reserva = strtotime($FechaOut);//pasamos fecha a formato unix
$dias_unix = $fecha_out_reserva - $fecha_in_reserva;//obtenemos numero de dias en formato unix
//obtenemos numero de dias en formato normal con floor descomentar para ver con floor
//y comentar la linea de round
//$dias = floor($dias_unix/86400);//linea de floor
//obtenemos numero de dias en formato normal con round descomentar para ver con round
//y comentar la linea de floor
$dias = round($dias_unix/86400);
$diasreal =$n+1;
echo 'Fecha inicio '.$FechaIn.' Fecha fin '.$FechaOut.' dias verdaderos '.$diasreal.'='.$dias.'dias coontados';
if ($dias!=$diasreal)
{
echo 'EROOORRRRRRRRRRRRRR';
}
echo '
<br/>';
}
?>
Para saber el numero de semanas se puede utilizar una constante
formato fecha: aaaa-mm-dd
$c = strtotime($fecha_final) - strtotime($fecha_inicial);
$semanas = ($c / 604800);
09/5/09
diferencia entre floor o roundPor: NicoMuy bueno el script.
La diferencia entre usar floor o round depende de lo que busquemos.
Ejemplo:
Si el resultado da 2.6 usaremos floor si necesitamos la cantidad de dias completos(2 en este caso), en cambio si necesitamos un valor aproximado sin precision podemos usar round y asi nos daria 3.
Saludos.
02/8/09
barbaroPor: argentinabuenisimo me sirvio mucho muy bien explicado!!
muchas gracias x el articulo!
22/9/09
Solucion mas facilPor: kalepLa manera mas facil es convertir la fecha a calendario Juliano, el cual convierte la fecha en calendario juliano, despues simplemente resta los numeros y obtendras el numero de dias exactos.
$jul1=juliantojd(9,25,2002);
$jul=juliantojd(11,25,2002);
echo '->'."$jul",' dias '.($jul-$jul1);
tambien puedes sumar los dias al dia juliano y convertirlo a la fecha deseada
echo 'Juliano 1 '.jdtojulian(2452556);
echo ' juliano '.juliantojd(9,25,2002);
Os espero les haya servido esta solucion, es la mas facil