在php中转换youtube Api v3视频持续时间

2022-08-30 20:21:18

如何将PT2H34M25S转换为2:34:25

我搜索并使用此代码。我是正则表达式的新手,有人可以解释一下吗?并帮助我解决我的问题

function covtime($youtube_time){
        preg_match_all('/(\d+)/',$youtube_time,$parts);
        $hours = floor($parts[0][0]/60);
        $minutes = $parts[0][0]%60;
        $seconds = $parts[0][1];
        if($hours != 0)
            return $hours.':'.$minutes.':'.$seconds;
        else
            return $minutes.':'.$seconds;
    }   

但是这个代码只给我HH:MM

所以傻傻地找到了解决方案:

   function covtime($youtube_time){
            preg_match_all('/(\d+)/',$youtube_time,$parts);
            $hours = $parts[0][0];
            $minutes = $parts[0][1];
            $seconds = $parts[0][2];
            if($seconds != 0)
                return $hours.':'.$minutes.':'.$seconds;
            else
                return $hours.':'.$minutes;
        }

答案 1

使用日期时间类

您可以使用 PHP 的 DateTime 类来实现此目的。此解决方案要简单得多,即使字符串中数量的格式顺序不同,也可以正常工作。在这种情况下,正则表达式解决方案(最有可能)会中断。

在 PHP 中,是有效的日期周期字符串,并且由 DateTime 解析器理解。然后,我们利用这个事实,并使用add()方法将其添加到Unix时代。然后,您可以设置结果日期的格式以获取所需的结果:PT2H34M25S

function covtime($youtube_time){
    if($youtube_time) {
        $start = new DateTime('@0'); // Unix epoch
        $start->add(new DateInterval($youtube_time));
        $youtube_time = $start->format('H:i:s');
    }
    
    return $youtube_time;
}   

echo covtime('PT2H34M25S');

演示


答案 2

AmalPferate的解决方案都很棒!但是,Amal解决方案一直给我额外的1小时。以下是我的解决方案,它与Amal相同,但方法不同,这对我有用。

$date = new DateTime('1970-01-01');
$date->add(new DateInterval('PT2H34M25S'));
echo $date->format('H:i:s')

日期时间->添加() 引用


推荐