Php 转换MP3持续时间

Php 转换MP3持续时间,php,math,mp3,duration,Php,Math,Mp3,Duration,我用我的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(($durati

我用我的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;
}
函数格式化时间($secs){
$times=数组(3600,60,1);
$time='';
$tmp='';
对于($i=0;$i<3;$i++){
$tmp=下限($secs/$times[$i]);
如果($tmp<1){
$tmp='00';
}
elseif($tmp<10){
$tmp='0'。$tmp;
}
$time.=$tmp;
如果($i<2){
$time.=':';
}
$secs=$secs%$次[$i];
}
返回$time;
}
不确定在编写此问题时是否有以下函数可用,但由于这是一个问题,我一直在问自己,所以这里开始

我使用了上面的答案:

$seconds = bcmod($row{'playtime_seconds'}, 60);
$minutes = floor($row{'playtime_seconds'} / 60);
$hours = floor($minutes / 60);
这在大多数情况下都有效,但没有填充-因此,当它应该是20:01时,你可以以20:1结束-并且在一个小时内效果不佳-一个长度等于length=“1:70:9”-因此,另一种选择是使用“date”功能

<?=date("H:i:s", $duration); ?>


从该秒数返回00:31:42

那么你是说秒数我也应该避免
bcmod()
?我不明白
bcmod()
是做什么的,另一个stackoverflow帖子中有人告诉我这样做,对大多数人来说,它似乎工作得很好。
bcmod
将模取到任意精度。基本上,
bcmod($a,$b)
的意思是
$a%$b
。以bc-开头的函数来自BCMath扩展。它们允许您执行任意精度计算。除非你需要微秒级的分辨率(我对此表示怀疑),否则没有什么意义。此外,这些函数将数字存储为字符串,因此当您进行普通除法时,它们将被转换为普通类型,您将失去精度。只有当他需要以下格式时,此代码才会起作用:“MM:SS”(即使超过一小时),但如果他需要“HH:MM:SS”,则此代码将无法工作。。。。。从技术上讲,瓦西姆·卡拉尼的功能是正确的。(我没有足够高的分数来否决这个,但它应该被否决。)如果你想要小时,只需添加
$hours=floor($minutes/60)$分钟%=60。我在一行中给出了他想要的答案,另一行是超过15行的答案,处理细节,比如字符串填充。如果我们真的想做到“正确”,我们就不应该这样做,因为从PHP5.3开始。