Преобразование продолжительности MP3 - PullRequest
2 голосов
/ 02 февраля 2011

Я использую свою медиатеку iTunes для получения данных из примерно 1100 mp3-файлов, и у меня возникла небольшая проблема с увеличением продолжительности библиотеки в минутах и ​​секундах.

$duration = 1893642;
$minutes = bcmod(($duration / 60), 60);
$seconds = bcmod($duration, 60);
echo $minutes.":".$seconds; //returns 0:42

Проблема в том, чточто этот конкретный MP3 на самом деле 31:42.Есть мысли о том, почему это не работает?

Ответы [ 3 ]

5 голосов
/ 02 февраля 2011
$minutes = bcmod(($duration / 60), 60);

занимает минуты по модулю 60. Если ваш трек не больше часа, он всегда скажет 0. Вы хотите, чтобы он был

$minutes = floor($duration / 60);
2 голосов
/ 23 марта 2012

Не уверен, была ли доступна следующая функция, когда этот вопрос был написан, но так как это вопрос, который я задавал себе, вот так.

Я использовал ответ выше:

$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 из этогоколичество секунд

2 голосов
/ 02 февраля 2011

Попробуйте эту функцию

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;
}
...