Единственным недостатком использования gmdate("H:i:s",$foo)
является то, что он работает только для $foo
в диапазоне от 0 до 86399 и дает вам начальные нули там, где вы можете или не захотите их.Вот решение, которое я использовал, которое использует gmdate()
только когда наш временной интервал большой:
function formatTimeSpan($span) {
if ($span < (60)) { //--- less than a minute
$r = $span." sec"; # just use the seconds as they are
}
elseif ($span < (60*60)) { //--- a minute to under an hour
$min = intval($span/60);
$sec = $span - ($min*60);
$r = $min." min, ".$sec." sec";
}
elseif ($span < (24*60*60)) { //--- an hour to under a day
$r = gmdate("G:i:s",$span);
}
else { //--- a day or more
$days = intval($span/(24*60*60));
$remSec = $span - ($days * (24*60*60));
$r = $days." d, ".gmdate("G:i:s",$remSec);
}
return $r;
}
Использование / вывод выглядит следующим образом:
echo formatTimeSpan(3); // 3 sec
echo formatTimeSpan(59); // 59 sec
echo formatTimeSpan(60); // 1 min, 0 sec
echo formatTimeSpan(559); // 9 min, 19 sec
echo formatTimeSpan(3667); // 1:01:07
echo formatTimeSpan(85483); // 23:44:43
echo formatTimeSpan(86901); // 1 d, 00:08:21
Очевидно, если вы хотите выводбольше похоже на 1 hr, 1 min, 7 sec
, вы можете полностью извлечь gmdate()
и изменить форматирование / строки в соответствии со своими вкусами / потребностями.
Небольшие предостережения, хотя: Это не проверяетпосмотрите, должны ли «единицы» быть единичными или множественными, поэтому я использовал такие сокращения, как «sec», «min», и т. д. Кроме того, он не проверяет наличие 0 каких-либо единиц;вы могли бы скорее 1 min, 0 sec
выразить просто как 1 min
.