将Youtube Data API V3视频时长格式转换为PHP中的标准时间

use*_*047 3 php youtube-data-api

我是从youtube API请求获取此数组,但在我看来,持续时间格式非常少见.他们为什么不在那里扔几秒钟?无论如何,这是阵列

[duration] => PT2M3S
[dimension] => 2d
[definition] => sd
[caption] => false
Run Code Online (Sandbox Code Playgroud)

有没有办法在PHP中将此持续时间转换为"H:i:s"格式?

在此先感谢您的帮助

Jam*_*mes 6

acidjazz有一个很好的解决方案,但有一个错字显示分钟.它应该是$di->i几分钟,而不是$di->m.如果你没有在一个对象中使用它,你也可以删除"公共静态"部分,然后我拿出了sprintf().

否则该函数按原样工作:

function duration($ytDuration) {

    $di = new DateInterval($ytDuration);
    $string = '';

    if ($di->h > 0) {
      $string .= $di->h.':';
    }

    return $string.$di->i.':'.$di->s;
}
Run Code Online (Sandbox Code Playgroud)

我会把这个作为对他的答案的评论添加,但是整个"你需要50个评论的声誉"BS,这使我无法坚持这个线程的流程.


And*_*rew 5

实际上它是简单的ISO8601日期.使用正则表达式分割字符串,如(\d+)分钟和秒.然后得到60分钟的整数部分得到小时.获得该部门的剩余部分以获得分钟数.

这是一个应该工作的例子,虽然我没有测试它

preg_match_all('/(\d+)/',$youtube_time,$parts);

$hours = floor($parts[0][0]/60);
$minutes = $parts[0][0]%60;
$seconds = $parts[0][1];
Run Code Online (Sandbox Code Playgroud)

  • 谢谢你的方法,最后我做到了这一点.`code` $ duration = new DateInterval($ videoData ['duration']); $ videoDuration =(60*60*$ duration-> h)+(6​​0*$ duration-> i)+ $ duration-> s; print gmdate("H:i:s",$ videoDuration); (4认同)