tiempo meses manualmente horas habiles fechas entre dias contador calcular calculadora años php html date web

php - meses - calcular tiempo entre dos fechas excel



Calcular el número de días entre dos fechas (1)

Debería utilizar date_diff() o su OO equivalente DateTime::diff() para los DateTime::diff() de fecha / hora.

$day1 = new DateTime($_REQUEST[''start'']); $day2 = new DateTime($_REQUEST[''end'']); $interval = $day1->diff($day2); echo $interval->format(''%d'');

Para PHP versión 5.2, puede usar lo siguiente:

$day1 = new DateTime($_REQUEST[''start'']); $day2 = new DateTime($_REQUEST[''end'']); $interval = round(abs($day2->format(''U'') - $day1->format(''U'')) / (60*60*24)); echo $interval;

Para las versiones de PHP anteriores a la 5.2, use strtotime() con la fórmula anterior:

$day1 = strtotime($_REQUEST[''start'']); $day2 = strtotime($_REQUEST[''end'']); $interval = round(abs($day2 - $day1) / (60*60*24)); echo $interval;

Posible duplicado:
Cómo encontrar el número de días entre dos fechas usando php

No quiero saber CÓMO hacer esto. Quiero saber por qué no da el resultado esperado.

Intento calcular el número de días entre dos fechas formateadas como YYYY-mm-dd con este código:

$day1 = strtotime($_REQUEST[''start'']); $day2 = strtotime($_REQUEST[''end'']); $nbOfDays = $day2 - $day1; $nbOfDays = ceil($nbOfDays/60/60/24); echo $nbOfDays;

El problema es que cuando calculo la diferencia entre 2012-12-01 y 2012-12-31 me da 30 días (debería ser 31) y la diferencia entre 2012-11-01 y 2012-11-30 también es 30 (que ¡es correcto!)

Actualizado para información pura:

Tuve que modificar este código (gracias a Justin):

$day1 = new DateTime($_REQUEST[''start'']); $day2 = new DateTime($_REQUEST[''end'']); $interval = round(abs($day2->format(''U'') - $day1->format(''U'')) / (60*60*24)); echo $interval;

para :

$day1 = new DateTime($_REQUEST[''start'']); $day2 = new DateTime($_REQUEST[''end'']); $nb1 = $day2->format(''U''); $nb2 = $day1->format(''U''); $interval = round(abs($nb1 - $nb2) / (60*60*24)); echo $interval;

porque

$day2->format(''U'') - $day1->format(''U'')

era igual a 0

Entonces, al final, la diferencia entre 2012-12-31 y 2012-12-01 todavía era 30. BUUUTTTT, la diferencia entre 2012-11-30 y 2012-11-01 fue 29, por lo que

echo $interval +1;

¡Da el número correcto de días en cualquier caso!