Разрешение изменения DateTime в PHP

При попытке найти разницу между двумя датами я сталкиваюсь с некоторыми проблемами. В качестве примера у меня есть дата1 как 2015-09-14 и date2 как 2015-09-18. Разница составит 5 дней, однако код возвращается 4 дня. Ниже приведен код:

$datetime1 = new DateTime($startdate); $datetime2 = new DateTime($enddate); $interval = $datetime1->diff($datetime2); $ptohours = $interval->format('%d %H'); 

где startdate – 2015-09-14 07:00:00 а enddate – 2015-09-14 16:00:00 .

Я пытаюсь рассчитать часы, которые сотрудник запрашивает как PTO. В приведенном выше примере это должно дать 45 часов.

Учитывая эти данные:

 $startdate = '2015-09-14 07:00:00'; $enddate = '2015-09-18 16:00:00'; $datetime1 = new DateTime($startdate); $datetime2 = new DateTime($enddate); $interval = $datetime1->diff($datetime2); $ptohours = $interval->format('%d %H'); print_r($interval); 

Выходной сигнал составляет четыре дня:

 DateInterval Object ( [y] => 0 [m] => 0 [d] => 4 [h] => 9 [i] => 0 [s] => 0 [weekday] => 0 [weekday_behavior] => 0 [first_last_day_of] => 0 [invert] => 0 [days] => 4 [special_type] => 0 [special_amount] => 0 [have_weekday_relative] => 0 [have_special_relative] => 0 ) 

Зачем?

Давайте разберем двадцать четыре часа:

 -14 07:00 a day has passed 1 -15 07:00 that's a day 2 -16 07:00 that's another day 3 -17 07:00 that's one more day 4 -18 07:00 not yet a full day -18 16:00 

Таким образом, результат четырех дней является технически правильным.

Если вы считаете, что вам нужно пять дней, тогда вы можете рассмотреть применение такой формулы:

 $adjustedDays = ceil($interval->d + $interval->h / 24.0); 

Который даст вам то, что вы ищете.