Имеется дефолтная функция под данную задачу?

Рейтинг: 1Ответов: 1Опубликовано: 30.03.2023

Есть тайм в секундах, к примеру 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"

https://www.php.net/manual/en/function.gmdate.php