2012-01-27 8 views
7

Estoy experimentando un problema bastante extraño usando la función diff de fecha de PHP 5.3 para calcular la diferencia en días entre dos fechas. Debajo está mi código:Extraño problema de PHP 5.3 con diferencia de fechas calculando la diferencia en días

$currentDate = new DateTime(); // (today's date is 2012-1-27) 
$startDate = new DateTime('2012-04-01'); 

$diff = $startDate->diff($currentDate); 

$daysBefore = $diff->d; 

echo $daysBefore; 

El código de arriba muestra 4 como el valor de la variable $ days Before.

¿Por qué PHP muestra una diferencia de 4 días entre las fechas del 27 de enero de 2012 y el 1 de abril de 2012, cuando claramente hay muchos más días entre estas fechas.

¿Estoy haciendo algo mal?

Respuesta

5

DateInterval::$d es la parte día del intervalo, no el número total de días de la diferencia. Para ello, se quiere DateInterval::$days, por lo que:

$daysBefore = $diff->days; 
2

Al crear un DateInterval a través del método DateTime::diff, no puebla apenas unos días, pero las horas, minutos, segundos, meses e incluso años en el solo carácter propiedades. Está revisando d de un solo carácter por días, que serán los días que quedan una vez que se calculen los años y los meses.

Intenta mirar en la propiedad days, que solo se llena cuando usas diff.

Comportamiento aquí es muy inconsistente. Consulte la página del manual DateInterval::format para obtener información interesante sobre lo que ocurre cuando se crea un Intervalo de fechas por diversos medios.

2

La propiedad d es el número de días como en "3 meses, 4 días". Si desea el número total de , utilice la propiedad days.

Cuestiones relacionadas