Php 使用YouTube API获取持续时间

Php 使用YouTube API获取持续时间,php,youtube,youtube-api,Php,Youtube,Youtube Api,我需要使用Youtube API V3获取视频持续时间。我的应用程序在使用API V3时运行良好,但现在无法运行 我找到了一个有效的示例,它是有效的: $dur=文件\u获取\u继续entshttps://www.googleapis.com/youtube/v3/videos?part=contentDetails&id=[VIDOID]&键=[API键]; $duration=json_decode$dur,true; foreach$duration['items']作为$vidTime{

我需要使用Youtube API V3获取视频持续时间。我的应用程序在使用API V3时运行良好,但现在无法运行

我找到了一个有效的示例,它是有效的:

$dur=文件\u获取\u继续entshttps://www.googleapis.com/youtube/v3/videos?part=contentDetails&id=[VIDOID]&键=[API键]; $duration=json_decode$dur,true; foreach$duration['items']作为$vidTime{ $vTime=$vidTime['contentDetails']['duration']; } 学分:

这将返回类似这样的时间格式

PT24M30S 
我怎样才能把它缩短到一个可读的时间呢。比如24:30

包含一个持续时间字段,该字段是以下格式的字符串。它将由开发人员根据您的应用程序和需要重新格式化它

视频的长度。标记值为ISO 8601持续时间。对于 例如,对于长度至少为一分钟且小于 一小时长,持续时间为PTMS格式,其中 字母PT表示该值指定一段时间,而 字母M和S分别表示以分钟和秒为单位的长度。 M和S字母前面的字符都是 指定视频的分钟数或秒数。例如 PT15M33S值表示视频为15分钟33秒 秒长

如果视频长度至少为一小时,则持续时间为格式 PTHMS,其中字母H的前面指定了长度 视频的时间和所有其他细节与 如上所述。如果视频长度至少为一天,则字母P 和T分开,值的格式为PDTHMS。请 有关完整的详细信息,请参阅ISO 8601规范

至于如何做,我必须说移除PT和S,并用a替换M:。它可能需要对您的部件进行一些测试,这取决于值为null时发生的情况。我将对进行一些研究包含一个持续时间字段,它是以下格式的字符串。它将由开发人员根据您的应用程序和需要重新格式化它

视频的长度。标记值为ISO 8601持续时间。对于 例如,对于长度至少为一分钟且小于 一小时长,持续时间为PTMS格式,其中 字母PT表示该值指定一段时间,而 字母M和S分别表示以分钟和秒为单位的长度。 M和S字母前面的字符都是 指定视频的分钟数或秒数。例如 PT15M33S值表示视频为15分钟33秒 秒长

如果视频长度至少为一小时,则持续时间为格式 PTHMS,其中字母H的前面指定了长度 视频的时间和所有其他细节与 如上所述。如果视频长度至少为一天,则字母P 和T分开,值的格式为PDTHMS。请 有关完整的详细信息,请参阅ISO 8601规范


至于如何做,我必须说移除PT和S,并用a替换M:。它可能需要对您的部件进行一些测试,这取决于值为null时发生的情况。我将对

进行一些研究一种可能的方法是使用stru\u replace函数

奖金内容-前导零

为了添加前导零,必须首先使用explode将字符串拆分,然后使用sprintf单独格式化数字;最后再把它们加在一起

$exploded_string = explode(":",$formated_stamp);
$new_formated_stamp = sprintf("%02d", $exploded_string[0]).":".sprintf("%02d", $exploded_string[1]);

一种可能的方法是使用str_replace函数

奖金内容-前导零

为了添加前导零,必须首先使用explode将字符串拆分,然后使用sprintf单独格式化数字;最后再把它们加在一起

$exploded_string = explode(":",$formated_stamp);
$new_formated_stamp = sprintf("%02d", $exploded_string[0]).":".sprintf("%02d", $exploded_string[1]);

我不敢相信,有人用过,为什么?就是这样,

$duration = new DateInterval('PT24M30S');

print $duration->format('%H:%i:%s'); // outputs: 00:24:30
有用链接:


我不敢相信,有人用过,为什么?就是这样,

$duration = new DateInterval('PT24M30S');

print $duration->format('%H:%i:%s'); // outputs: 00:24:30
有用链接:


我使用以下函数转换YouTube持续时间。只需将$yt替换为YouTube为您提供的格式,它就会打印出清晰易读的内容

function ConvertYoutubeVideoDuration($yt){
$yt=str_replace(['P','T'],'',$yt);
foreach(['D','H','M','S'] as $a){
    $pos=strpos($yt,$a);
    if($pos!==false) ${$a}=substr($yt,0,$pos); else { ${$a}=0; continue; }
    $yt=substr($yt,$pos+1);
}
if($D>0){
    $M=str_pad($M,2,'0',STR_PAD_LEFT);
    $S=str_pad($S,2,'0',STR_PAD_LEFT);
    return ($H+(24*$D)).":$M:$S"; // add days to hours
} elseif($H>0){
    $M=str_pad($M,2,'0',STR_PAD_LEFT);
    $S=str_pad($S,2,'0',STR_PAD_LEFT);
    return "$H:$M:$S";
} else {
    $S=str_pad($S,2,'0',STR_PAD_LEFT);
    return "$M:$S";
}
}

我使用以下函数转换YouTube持续时间。只需将$yt替换为YouTube为您提供的格式,它就会打印出清晰易读的内容

function ConvertYoutubeVideoDuration($yt){
$yt=str_replace(['P','T'],'',$yt);
foreach(['D','H','M','S'] as $a){
    $pos=strpos($yt,$a);
    if($pos!==false) ${$a}=substr($yt,0,$pos); else { ${$a}=0; continue; }
    $yt=substr($yt,$pos+1);
}
if($D>0){
    $M=str_pad($M,2,'0',STR_PAD_LEFT);
    $S=str_pad($S,2,'0',STR_PAD_LEFT);
    return ($H+(24*$D)).":$M:$S"; // add days to hours
} elseif($H>0){
    $M=str_pad($M,2,'0',STR_PAD_LEFT);
    $S=str_pad($S,2,'0',STR_PAD_LEFT);
    return "$H:$M:$S";
} else {
    $S=str_pad($S,2,'0',STR_PAD_LEFT);
    return "$M:$S";
}
}
解决方案PHP

解决方案PHP

请注意,这会将PT2M3S转换为2:3。请注意,这会将PT2M3S转换为2:3