2015-09-29 5 views
1

Я хочу показать, сколько времени осталось между текущим временем и будущим временем в часах: минуты: секунды (преобразует дни в часы).DateTime разница + Преобразование дней в часы

# Current time. 
$current_datetime=new DateTime(); 
# Time in future. 
$future_time=new DateTime('2015-09-30 05:59:38'); 
# Get difference. 
$interval=$current_datetime->diff($future_time); 
# Format time (this does not convert days to hours). 
//$duration=$interval->format('%H:%I:%S'); 

После того, что я думал, что я мог сделать:

$duration=sprintf('%02d:%02d:%02d', $interval->days * 24 + $interval->H, $interval->i, $interval->s); 

Но это не работает должным образом. Он показывает 00:27:27. Минуты и секунды правильные, но они показывают 00 в течение нескольких часов.

+0

Можете ли вы показать, какой результат вы ожидаете? –

+0

Вы пробовали $ interval-> h вместо $ interval-> H в вашем втором подходе? Имена свойств чувствительны к регистру в PHP. – pamelus

+0

проверьте это на час ($ interval-> days * 24) + ($ interval-> H). Просто предложение –

ответ

-1

Получить текущую временную метку и метку даты в будущем и принять ее разницу.

Как только вы получите разницу. вы можете манипулировать разницей и преобразовывать ее в часовые минуты и секунды.

$diff = $future_timestamp - time(); 
$hours = $diff % 3600; 
$minutes = ($diff - ($hours*3600)) % 60; 
$seconds = $diff - (($hours*3600) + ($minutes*60)); 
+1

Обратите внимание, что «математический» метод обескураживает, потому что небезопасно рассчитать разницу, когда есть летнее время или другие изменения времени на месте. – Maks3w

Смежные вопросы