2012-10-21 10 views
5

come posso ottenere questo in uscitaottenere la differenza nel tempo in HH: MM formato php

HH: formato MM?

$to_time = strtotime("2008-12-13 10:42:00"); <--AM 
$from_time = strtotime("2008-12-14 8:21:00"); <-- PM 
$stat = round(abs($to_time - $from_time)/60,2). "min"; 

quello che ho ottenuto da questo è 1299 minuti

ma Non riesco a capire come farlo uscita

21h: 41m

risposta

8

In primo luogo, 8:21:00 saranno interpretati come 08:00 a meno che non specificato diversamente con DateTime::createFromFormat().

di capire le differenze di tempo, utilizzare DateTime::diff():

$to = new DateTime("2008-12-13 10:42:00"); 
$from = new DateTime("2008-12-14 8:21:00"); 

$stat = $to->diff($from); // DateInterval object 

echo $stat->format('%Hh:%Im'); 

Verrà visualizzata la differenza ora/minuto tra i due tempi, ma solo fino a 24 ore.

Se avete bisogno di più di 24 ore, si dovrebbe effettuare le seguenti operazioni:

$hours = $stat->days * 24 + $stat->h; 
$minutes = $stat->i; 

printf('%02sh:%sm', $hours, $minutes); 
+0

Questo anche non restituisce il valore corretto quando non v'è più di 24 ore tra le date –

+0

L'oggetto $ stat è un'istanza di [DateInterval ] (http://au.php.net/DateInterval), controlla i documenti su come estrarre giorni/mesi/anni. – Alex

+0

Quindi si prega di rimuovere/modificare la riga 'format' poiché non include alcuna informazione sui giorni e produce risultati fuorvianti. –

2

Prima di tutto è necessario includere AM e PM nelle stringhe di data, altrimenti 2008-12-14 8:21:00 verrà interpretato come 8:21 AM

Ora la differenza tra due date è 2019 che è 33h: 19m, non puoi avere i formati di data standard, poiché supportano solo 24 ore di clock. Si dovrebbe tenere $stat come intero, e visualizzarlo con sprintf come in questo modo:

echo sprintf('%02dh:%02dm', $stat/60, $stat%60);