Как можно сделать код ниже конвертируемых дней в часах?
$timestart = date_create('02/11/2011' . $row->timestart); //$row->timestart returns time in 00:00:00 format $timestop = date_create('02/11/2011' . $row->timestop); //$row->timestop returns time in 00:00:00 format date_add($timestop, date_interval_create_from_date_string('2 days')); //add 2 days $date_diff = date_diff($timestart, $timestop); echo "Timespan: "; echo $date_diff->format('%h hours'); echo "<br />";
Как я могу получить hours:minutes:seconds
истек? Я пытаюсь остаться с функцией date_diff
.
Результат date_diff () является объектом класса DateInterval . Такой объект имеет очень полезное свойство – $days
: общее количество дней между начальными и конечными датами. Кроме того, он сохраняет (как свои общедоступные свойства) разницу в часах, минутах и секундах.
Итак, я полагаю, вам нужно просто извлечь значения этих свойств из переменной $ date_diff, а затем добавить 24*$days
к числу часов. ) Все это можно объединить в простую функцию:
function hms_date_diff(DateInterval $date_diff) { $total_days = $date_diff->days; $hours = $date_diff->h; if ($total_days !== FALSE) { $hours += 24 * $total_days; } $minutes = $date_diff->i; $seconds = $date_diff->s; return sprintf('%02d:%02d:%02d', $hours, $minutes, $seconds); }
Что касается формата DateDiff ::, то документ говорит …
Метод DateInterval :: format () не пересчитывает точки переноса в строках времени или в сегментах даты.
Объект DateInterval
, возвращаемый date_diff
хранит каждый период времени отдельно, секунды, минуты, часы, дни, месяцы и годы.
Поскольку разница составляет 2 дня, свойство часов равно 0, что и получается.