将 youtube 持续时间转换为秒
Posted
技术标签:
【中文标题】将 youtube 持续时间转换为秒【英文标题】:Convering youtube duration into seconds 【发布时间】:2016-11-05 02:36:09 【问题描述】:目前,当您获得 youtube 时长时,您会得到类似 PT3M10S
的信息。
下面的代码将其更改为3:10
。但是我希望只获得 SECONDS,所以 190
将是输出。
$duration = str_replace(array("PT","M","S"), array("",":",""),$duration);
【问题讨论】:
【参考方案1】:您可以尝试使用正则表达式来获取值,然后从那里获取总秒数。比如:
$duration="PT3M10S";
$pattern='/PT(\d+)M(\d+)S/';
preg_match($pattern,$duration,$matches);
$seconds=$matches[1]*60+$matches[2];
该模式将分钟放入第一组,将秒放入下一组。 $matches 将在调用 preg_match() 后包含匹配的组。 您需要获取第 1 组和第 2 组,因为匹配中的第 0 组是完全匹配的文本。在本例中为“PT3M10S”。
【讨论】:
我得到 Undefined offset 错误。检查my answer。【参考方案2】:看过here:
$youtube_duration = $vinfo['duration'];
$interval = new DateInterval(youtube_duration);
$seconds = $interval->h * 3600 + $interval->i * 60 + $interval->s;
【讨论】:
【参考方案3】:function covtime($youtube_time)
preg_match_all('/(\d+)/', $youtube_time, $parts);
$h = preg_match('/H/', $youtube_time);
$m = preg_match('/M/', $youtube_time);
$s = preg_match('/S/', $youtube_time);
if ($h && $m && $s)
$hours = $parts[0][0];
$minutes = $parts[0][1];
$seconds = $parts[0][2];
if ($minutes < 10)
$minutes = '0' . $parts[0][1];
if ($seconds < 10)
$seconds = '0' . $parts[0][2];
echo $hours . ':' . $minutes . ':' . $seconds;
else if ($h && $m)
$hours = $parts[0][0];
$minutes = $parts[0][1];
$seconds = '00';
if ($minutes < 10)
$minutes = '0' . $parts[0][1];
echo $hours . ':' . $minutes . ':' . $seconds;
else if ($m && $s)
$minutes = $parts[0][0];
$seconds = $parts[0][1];
if ($seconds < 10)
$seconds = '0' . $parts[0][1];
echo $minutes . ':' . $seconds;
else if ($h && $s)
$hours = $parts[0][0];
$minutes = '00';
$seconds = $parts[0][1];
if ($seconds < 10)
$seconds = '0' . $parts[0][1];
echo $hours . ':' . $minutes . ':' . $seconds;
else if ($h)
$hours = $parts[0][0];
$minutes = '00';
$seconds = '00';
echo $hours . ':' . $minutes . ':' . $seconds;
else if ($m)
$minutes = $parts[0][0];
$seconds = '00';
echo $minutes . ':' . $seconds;
else if ($s)
$minutes = '0';
$seconds = $parts[0][0];
if ($seconds < 10)
$seconds = '0' . $parts[0][0];
echo $minutes . ':' . $seconds;
echo covtime(PT1H2M3S);
【讨论】:
我建议您在代码周围添加一些上下文\解释。【参考方案4】:echo pt2sec("PT3M52S");
function pt2sec($str)
preg_match("@PT((?P<hour>[0-9]+)H)?((?P<min>[0-9]+)M)?((?P<sec>[0-9]+)S)?@", $str, $m);
return (isset($m["hour"])?$m["hour"]*3600:0)+(isset($m["min"])?$m["min"]*60:0)+(isset($m["sec"])?$m["sec"]:0);
【讨论】:
以上是关于将 youtube 持续时间转换为秒的主要内容,如果未能解决你的问题,请参考以下文章
批处理文件 HH:MM:SS 转换为秒 Youtube-DL get-duration
在 JavaScript 中将 Dialogfow 持续时间系统实体从分钟转换为秒