2012-10-21 10 views
5

Wie kann ich dies zur AusgabeZeitunterschied im HH: MM Format erhalten php

HH: MM Format?

$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"; 

, was ich von diesem bekam sind 1299 Minuten

aber ich kann nicht herausfinden, wie es

21h Ausgang zu machen: 41m

Antwort

8

Zunächst wird 8:21:00 es sei denn, Sie als 08.00 Uhr interpretiert werden anders angegeben unter Verwendung von DateTime::createFromFormat().

Zeitdifferenzen Um herauszufinden, verwenden 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'); 

Dies wird die Stunde/Minute Differenz zwischen den beiden Zeitpunkten angezeigt werden, aber nur bis zu 24 Stunden.

Wenn Sie mehr als 24 Stunden benötigen, sollten Sie Folgendes tun:

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

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

Dieser auch nicht korrekten Wert zurückgibt, wenn es mehr als 24 Stunden zwischen Terminen –

+0

Die $ Stat-Objekt ist eine Instanz von [DateInterval ] (http://au.php.net/DateInterval), überprüfen Sie die Dokumentation zum Extrahieren von Tagen/Monaten/Jahren. – Alex

+0

Bitte entfernen/bearbeiten Sie 'format' Zeile, da es keine Informationen über Tage enthält und irreführende Ergebnisse erzeugt. –

2

Zu allererst müssen Sie AM und PM bei der Datumszeichenketten enthalten, sonst 2008-12-14 8:21:00 als 8:21 AM

interpretiert werden

Jetzt ist der Unterschied zwischen zwei Daten 2019 das ist 33h: 19m, Sie können nicht mit Standard-Datumsformaten, da sie nur 24h Uhr unterstützen. Sie sollten $stat als integer halten, und zeigen Sie es mit sprintf wie wie folgt aus:

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