Имеется дефолтная функция под данную задачу?
Есть тайм в секундах, к примеру 200 или 1000 или 750 и тд
Необходимо привести секунды в часы,минуты,секунды или даже в дни,часы,минуты,секунды.
То есть, если секунда у на
180 -> 3:00
183 -> 3:03
20 -> 20
3600 -> 1:00:00
-> 1:01:00
Вот, что необходимо получать на выходе, какой формат. Если нет часов, значит минуты без нуля с переди. Если же есть часы, а минуты менее 10, необходимо добавить ноль...
Есть что то похожее, я тут наколхозил...
[$h, $m, $s] = [intval($film['time']/3600), intval($film['time']%3600/60), intval($film['time']%60)];
$time = ($h ? $h.':' : null).($m ? ($h && $m < 10 ? '0' : null).$m.':' : null).($s < 10 ? '0' : null).$s;
Ответы (1 шт):
В PHP нет встроенных функций для вывода даты в таком формате. Тут либо использовать библиотеки, например DateTime либо писать самому.
Я бы упростил ваш код используя функцию gmdate(). Функция форматирует дату и время в соответствии с заданным форматом, но может использоваться и для форматирования времени в течение суток, которое задается в секундах.
$time_in_seconds = 183;
$time = match (true) {
$time_in_seconds >= 3600 => gmdate('H:i:s', $time_in_seconds),
$time_in_seconds >= 60 => gmdate('i:s', $time_in_seconds),
default => gmdate('s', $time_in_seconds),
};
echo $time; // Выведет "3:03"
Второй вариант (так же при помощи gmdate):
function format_time($seconds) {
$format = ($seconds >= 3600) ? 'G:i:s' : 'i:s';
$time = ltrim(gmdate($format, $seconds), '0');
return ($time[0] === ':') ? substr($time, 1) : $time;
}
// Result
echo format_time(180) . "\n"; // "3:00"
echo format_time(183) . "\n"; // "3:03"
echo format_time(20) . "\n"; // "20"
echo format_time(3600) . "\n"; // "1:00:00"
echo format_time(3660) . "\n"; // "1:01:00"