2012-10-21 10 views
5

jak mogę uzyskać to na wyjściuuzyskać różnicę czasu w HH: format MM php

HH: format 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"; 

co mam z tym jest 1299 minut

ale nie mogę dowiedzieć się, jak zrobić to wyjście

21h: 41m

Odpowiedz

8

Po pierwsze, 8:21:00 będą interpretowane jako 8AM chyba że określone inaczej przy użyciu DateTime::createFromFormat().

Aby pracować z różnic czasowych, należy 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'); 

To pokaże różnicę godzin/minut między dwa razy, ale tylko do 24 godzin.

Jeśli potrzebujesz więcej niż 24 godzin, należy wykonać następujące czynności:

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

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

Ten również nie zwraca prawidłową wartość, gdy istnieje więcej niż 24 godzin pomiędzy datami –

+0

Przedmiotem $ stat jest instancją [DateInterval ] (http://au.php.net/DateInterval), sprawdź dokumentację dotyczącą wyodrębniania dni/miesięcy/lat. – Alex

+0

Proszę zatem usunąć/edytować wiersz 'format', ponieważ nie zawiera on żadnych informacji o dniach i powoduje wprowadzanie w błąd. –

2

Przede wszystkim trzeba to AM i PM w swoich łańcuchach daty, inaczej 2008-12-14 8:21:00 będą interpretowane jako 8:21 AM

Teraz różnica między dwiema datami to 2019 czyli 33h: 19m, nie możesz mieć standardowych formatów daty, ponieważ obsługują one jedynie zegar 24-godzinny. Należy zachować $stat jako liczba całkowita, i wyświetlić go z sprintf jak tak:

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