【问题标题】:Converting MP3 duration time转换 MP3 持续时间
【发布时间】:2011-06-20 05:24:31
【问题描述】:

我正在使用我的 iTunes 库从大约 1,100 个 mp3 中获取数据,但在将库的持续时间设置为分钟和秒时遇到了一个小问题。

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

问题是这个特定的 MP3 实际上是 31:42。关于为什么这不起作用的任何想法?

【问题讨论】:

    标签: php math mp3 duration


    【解决方案1】:
    $minutes = bcmod(($duration / 60), 60);
    

    以 60 为模取分钟。除非您的曲目超过一个小时,否则它将始终显示为 0。 你希望它是

    $minutes = floor($duration / 60);
    

    【讨论】:

    • 所以你说我也应该避免bcmod()?我不明白 bcmod() 做了什么,另一个 stackoverflow 帖子中的某个人告诉我这样做,对于他们中的大多数人来说,它似乎工作正常。
    • bcmod 将模数设为任意精度。基本上,bcmod($a, $b) 表示$a % $b。以 bc- 开头的函数来自 BCMath 扩展。它们允许您执行任意精度的计算。除非您需要微秒级分辨率(我对此表示怀疑),否则它没有多大意义。此外,这些函数将数字存储为字符串,因此当您进行普通除法时,它们将被强制转换为普通类型,您将失去精度。
    • 此代码仅在他想要的是以下格式时才有效:“MM:SS”(甚至超过一个小时)但如果他想要“HH:MM:SS”,这将不起作用.....所以从技术上讲,Wasim Karani 的功能是正确的。 (我没有足够高的分数来投反对票,但应该投反对票。)
    • 如果您想要几个小时,只需添加 $hours = floor($minutes / 60); $minutes %= 60;。我在一行中给了他确切的要求,另一个答案超过 15 行,并处理字符串填充等细节。如果我们真的想要“正确”,我们不应该这样做,因为this functionality is in the standard library 自 PHP 5.3 起。
    【解决方案2】:

    试试这个功能

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

    【讨论】:

      【解决方案3】:

      不确定在写这个问题时是否可以使用以下功能,但由于这是我一直在问自己的问题,所以就这样吧。

      我使用了上面的答案:

      $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

      【讨论】:

        猜你喜欢
        • 2014-06-01
        • 2013-05-12
        • 1970-01-01
        • 1970-01-01
        • 2020-09-05
        • 2017-02-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多