2015-11-06 11 views
11

Próbuję dowiedzieć się, jak mogę wziąć dwa ciągi daty, które są przechowywane w naszej bazie danych i przekonwertować je do różnicy w formacie czasu hh: mm: ss.Węgiel różnica czasu między dwiema datami w gg: mm: ss format

Spojrzałem na diffForHumans, ale to nie daje format chciałbym i zwraca rzeczy jak after, ago, etc; co jest przydatne, ale nie dla tego, co próbuję zrobić.

Czas trwania nigdy nie przekroczy dni, tylko maksymalnie kilka godzin.

$startTime = Carbon::parse($this->start_time); 
$finishTime = Carbon::parse($this->finish_time); 

$totalDuration = $finishTime->diffForHumans($startTime); 
dd($totalDuration); 

// Have: "21 seconds after" 
// Want: 00:00:21 
+0

FYI, '$ totalDuration = $ finishTime-> diffForHumans ($ startTime, true); dd ($ totalDuration); ' Powinien zwrócony" 21 sekund ". Wiem, że nadal nie jest to format, którego szukasz, ale w ten sposób usuwasz elementy takie jak "po" i "temu", jak podano w Twoim pytaniu. – willjohnathan

Odpowiedz

12

skończyło się chwytając różnicę całkowite sekund przy użyciu węgla:

$totalDuration = $finishTime->diffInSeconds($startTime); 
// 21 

następnie wykorzystywane gmdate:

gmdate('H:i:s', $totalDuration); 
// 00:00:21 

Jeśli ktoś ma lepszy sposób byłbym zainteresowany. W przeciwnym razie to działa.

+16

Innym sposobem, jaki mogę sobie wyobrazić, jest '$ finishTime-> diff ($ startTime) -> format ("% H:% i:% s ");' –

+2

Żadna z nich nie działa, jeśli daty mają różne dni (np. 1 stycznia i 5 stycznia). – Alex

+0

Przetestowałem to rozwiązanie obejmujące daty (różne dni) i to działa. Dzięki mtpultz. – mcmacerson

12
$finishTime->diff($startTime)->format('%H:%I:%S'); 
// 00:00:21