Just use floor
and the values 86400
(seconds in a day - 60 * 60 * 24
), 3600
(seconds in an hour - 60 * 60
) and 60
(seconds in a minute):
<?php
function secondsToTime($seconds) {
$days = floor($seconds / 86400);
$seconds -= ($days * 86400);
$hours = floor($seconds / 3600);
$seconds -= ($hours * 3600);
$minutes = floor($seconds / 60);
$seconds -= ($minutes * 60);
$values = array(
'day' => $days,
'hour' => $hours,
'minute' => $minutes,
'second' => $seconds
);
$parts = array();
foreach ($values as $text => $value) {
if ($value > 0) {
$parts[] = $value . ' ' . $text . ($value > 1 ? 's' : '');
}
}
return implode(' ', $parts);
}
var_dump(secondsToTime(1234561));
//string(36) "14 days 6 hours 56 minutes 1 second"
?>
DEMO