Я использую свою библиотеку iTunes, чтобы получить данные из примерно 1100 mp3, и я столкнулся с небольшой проблемой в том, что время библиотеки в минутах и секундах.
$duration = 1893642; $minutes = bcmod(($duration / 60), 60); $seconds = bcmod($duration, 60); echo $minutes.":".$seconds; //returns 0:42
Проблема в том, что этот конкретный MP3 на самом деле 31:42. Любые мысли о том, почему это не работает?
$minutes = bcmod(($duration / 60), 60);
занимает минуты по модулю 60. Если ваш трек больше часа, он всегда будет говорить 0. Вы хотите, чтобы это было
$minutes = floor($duration / 60);
Попробуйте эту функцию
function formatTime($secs) { $times = array(3600, 60, 1); $time = ''; $tmp = ''; for($i = 0; $i < 3; $i++) { $tmp = floor($secs / $times[$i]); if($tmp < 1) { $tmp = '00'; } elseif($tmp < 10) { $tmp = '0' . $tmp; } $time .= $tmp; if($i < 2) { $time .= ':'; } $secs = $secs % $times[$i]; } return $time; }
Не уверен, была ли доступна следующая функция, когда этот вопрос был написан, но поскольку это вопрос, который я задавал себе, так и здесь.
Я использовал ответ выше:
$seconds = bcmod($row{'playtime_seconds'}, 60); $minutes = floor($row{'playtime_seconds'} / 60); $hours = floor($minutes / 60);
Которая работает в большинстве случаев, но нет прокладки – так что вы можете закончиться с 20: 1, когда это должно быть 20:01 – и это не хорошо в течение часа – одна длина длится = «1: 70: 9 ", поэтому альтернативой является использование функции« дата ».
<?=date("H:i:s", $duration); ?>
который возвращает 00:31:42 с этого количества секунд