Php 将youtube持续时间转换为秒

Php 将youtube持续时间转换为秒,php,youtube,youtube-api,Php,Youtube,Youtube Api,当前,当您获得youtube持续时间时,您会获得类似于PT3M10S的内容 下面的代码将其更改为3:10。然而,我希望只得到秒,因此,190将是输出 $duration = str_replace(array("PT","M","S"), array("",":",""),$duration); 您可以尝试使用正则表达式获取值,然后从中获取总秒数。比如: $duration="PT3M10S"; $pattern='/PT(\d+)M(\d+)S/'; preg_match($pattern,

当前,当您获得youtube持续时间时,您会获得类似于
PT3M10S
的内容

下面的代码将其更改为
3:10
。然而,我希望只得到秒,因此,
190
将是输出

$duration = str_replace(array("PT","M","S"), array("",":",""),$duration);

您可以尝试使用正则表达式获取值,然后从中获取总秒数。比如:

$duration="PT3M10S";
$pattern='/PT(\d+)M(\d+)S/';
preg_match($pattern,$duration,$matches);
$seconds=$matches[1]*60+$matches[2];
该模式将分钟分为第一组,秒分为下一组$调用preg_match()后,匹配项将包含匹配的组。
您需要获得组1和组2,因为匹配中的组0是完全匹配的文本。在本例中为“PT3M10S”。

您可以尝试使用正则表达式获取值,然后从中获取总秒数。比如:

$duration="PT3M10S";
$pattern='/PT(\d+)M(\d+)S/';
preg_match($pattern,$duration,$matches);
$seconds=$matches[1]*60+$matches[2];
该模式将分钟分为第一组,秒分为下一组$调用preg_match()后,匹配项将包含匹配的组。 您需要获得组1和组2,因为匹配中的组0是完全匹配的文本。在本例中为“PT3M10S”。

函数时间($youtube\u时间){
preg_match_all(“/(\d+)/”,$youtube_time,$parts);
$h=预匹配('/h/',$youtube\u时间);
$m=preg_match('/m/',$youtube_time);
$s=preg_match('/s/',$youtube_time);
如果($h&&m&&s){
$hours=$parts[0][0];
$minutes=$parts[0][1];
$seconds=$parts[0][2];
如果($分钟<10){
$minutes='0'.$parts[0][1];
}
如果($s<10){
$seconds='0'.$parts[0][2];
}
回显$hours.:'.$minutes.:'.$seconds;
}如果有其他情况($h&$m){
$hours=$parts[0][0];
$minutes=$parts[0][1];
$seconds='00';
如果($分钟<10){
$minutes='0'.$parts[0][1];
}
回显$hours.:'.$minutes.:'.$seconds;
}其他如果($m&&s){
$minutes=$parts[0][0];
$seconds=$parts[0][1];
如果($s<10){
$seconds='0'。$parts[0][1];
}
回显$minutes.“:”.$seconds;
}其他如果($h&&s){
$hours=$parts[0][0];
$minutes='00';
$seconds=$parts[0][1];
如果($s<10){
$seconds='0'。$parts[0][1];
}
回显$hours.:'.$minutes.:'.$seconds;
}如果有的话($h){
$hours=$parts[0][0];
$minutes='00';
$seconds='00';
回显$hours.:'.$minutes.:'.$seconds;
}如果有的话(百万美元){
$minutes=$parts[0][0];
$seconds='00';
回显$minutes.“:”.$seconds;
}如果有的话($s){
$minutes='0';
$seconds=$parts[0][0];
如果($s<10){
$seconds='0'。$parts[0][0];
}
回显$minutes.“:”.$seconds;
}
}
回波共变时间(PT1H2M3S);
函数时间($youtube\u时间){
preg_match_all(“/(\d+)/”,$youtube_time,$parts);
$h=预匹配('/h/',$youtube\u时间);
$m=preg_match('/m/',$youtube_time);
$s=preg_match('/s/',$youtube_time);
如果($h&&m&&s){
$hours=$parts[0][0];
$minutes=$parts[0][1];
$seconds=$parts[0][2];
如果($分钟<10){
$minutes='0'.$parts[0][1];
}
如果($s<10){
$seconds='0'.$parts[0][2];
}
回显$hours.:'.$minutes.:'.$seconds;
}如果有其他情况($h&$m){
$hours=$parts[0][0];
$minutes=$parts[0][1];
$seconds='00';
如果($分钟<10){
$minutes='0'.$parts[0][1];
}
回显$hours.:'.$minutes.:'.$seconds;
}其他如果($m&&s){
$minutes=$parts[0][0];
$seconds=$parts[0][1];
如果($s<10){
$seconds='0'。$parts[0][1];
}
回显$minutes.“:”.$seconds;
}其他如果($h&&s){
$hours=$parts[0][0];
$minutes='00';
$seconds=$parts[0][1];
如果($s<10){
$seconds='0'。$parts[0][1];
}
回显$hours.:'.$minutes.:'.$seconds;
}如果有的话($h){
$hours=$parts[0][0];
$minutes='00';
$seconds='00';
回显$hours.:'.$minutes.:'.$seconds;
}如果有的话(百万美元){
$minutes=$parts[0][0];
$seconds='00';
回显$minutes.“:”.$seconds;
}如果有的话($s){
$minutes='0';
$seconds=$parts[0][0];
如果($s<10){
$seconds='0'。$parts[0][0];
}
回显$minutes.“:”.$seconds;
}
}
回波共变时间(PT1H2M3S);
参见:

见:

回波pt2sec(“PT3M52S”); 函数pt2sec($str){ 预匹配(@PT((-P[0-9]+)H)(-P[0-9]+)M)(-P[0-9]+)S)@,$str,$M); 返回(isset($m[“hour”])?$m[“hour”]*3600:0)+(isset($m[“min”])?$m[“min”]*60:0)+(isset($m[“sec”])?$m[“sec”]:0); }
回波pt2sec(“PT3M52S”);
函数pt2sec($str){
预匹配(@PT((-P[0-9]+)H)(-P[0-9]+)M)(-P[0-9]+)S)@,$str,$M);
返回(isset($m[“hour”])?$m[“hour”]*3600:0)+(isset($m[“min”])?$m[“min”]*60:0)+(isset($m[“sec”])?$m[“sec”]:0);
}

我建议您在代码周围添加一些上下文\解释。我建议您在代码周围添加一些上下文\解释。我会得到未定义的偏移量错误。检查。我得到未定义的偏移错误。检查。
    $youtube_duration = $vinfo['duration'];
    $interval = new DateInterval(youtube_duration);
    $seconds = $interval->h * 3600 + $interval->i * 60 + $interval->s;
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);
}