2015-11-06 14 views
11

Sto cercando di capire come posso prendere due stringhe di data e ora che sono memorizzate nel nostro database e convertirle in una differenza di formato orario di hh: mm: ss.Carbon Difference in Time between two two Date in hh: mm: ss

Ho guardato a diffForHumans, ma questo dà il formato che mi piacerebbe e restituisce cose come after, ago, ecc; che è utile, ma non per quello che sto cercando di fare.

La durata non sarà mai di giorni, solo un massimo di un paio d'ore.

$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); ' Dovrebbe restituire" 21 secondi ". So che non è ancora il formato che stavi cercando, ma è così che rimuovi elementi come "dopo" e "fa", come indicato nella tua domanda. – willjohnathan

risposta

12

ho finito per afferrare la differenza totale secondi utilizzando carbonio:

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

poi utilizzato gmdate:

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

Se qualcuno ha un modo migliore Sarei interessato. Altrimenti funziona.

+16

Solo un altro modo che posso pensare è '$ finishTime-> diff ($ startTime) -> formato ('% H:% i:% s');' –

+2

Nessuno di questi lavori, se le date hanno giorni diversi (ad es. 1 gennaio e 5 gennaio). – Alex

+0

Ho testato questa soluzione per le date (giorni diversi) e funziona. Grazie mtpultz. – mcmacerson

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