私は、YouTube API リクエストからこの配列を取得していますが、私の意見では、デュレーション形式は非常にまれです。なぜ彼らはそこに秒を入れなかったのですか?いずれにせよ、これは配列です
[duration] => PT2M3S
[dimension] => 2d
[definition] => sd
[caption] => false
この期間を PHP で "H:i:s" 形式に変換する方法はありますか?
よろしくお願いいたします。
私は、YouTube API リクエストからこの配列を取得していますが、私の意見では、デュレーション形式は非常にまれです。なぜ彼らはそこに秒を入れなかったのですか?いずれにせよ、これは配列です
[duration] => PT2M3S
[dimension] => 2d
[definition] => sd
[caption] => false
この期間を PHP で "H:i:s" 形式に変換する方法はありますか?
よろしくお願いいたします。
実際、それは単純な 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];
PHP のDateIntervalクラスを使用して、適切に解析できます。たとえば、YouTube ラッパー クラスの関数を解析して YouTube の表示形式に変換すると、次のようになります。
public static function duration($ytDuration) {
$di = new DateInterval($ytDuration);
$string = '';
if ($di->h > 0) {
$string .= $di->h.':';
}
return $string.$di->m.':'.sprintf('%02s',$di->s);
}
ここで@chris-zs の回答を使用し、それを php に変換しました。
function getDurationSeconds($duration){
preg_match_all('/[0-9]+[HMS]/',$duration,$matches);
$duration=0;
foreach($matches as $match){
//echo '<br> ========= <br>';
//print_r($match);
foreach($match as $portion){
$unite=substr($portion,strlen($portion)-1);
switch($unite){
case 'H':{
$duration += substr($portion,0,strlen($portion)-1)*60*60;
}break;
case 'M':{
$duration +=substr($portion,0,strlen($portion)-1)*60;
}break;
case 'S':{
$duration += substr($portion,0,strlen($portion)-1);
}break;
}
}
// echo '<br> duratrion : '.$duration;
//echo '<br> ========= <br>';
}
return $duration;
}
それは私と一緒に働いた:)
誰かが期間を取得するのに役立つかもしれません:
$interval = new \DateInterval($iso8601);
// in seconds:
$seconds = $interval->h * 360 + $interval->i * 60 + $interval->s;
// in "H:i:s" format:
echo $interval->format('%H:%i:%s');
これが私の解決策です:
preg_match('/(\d+)H/', $duration, $match);
$h = ($match[0])?filter_var($match[0], FILTER_SANITIZE_NUMBER_INT).":":'';
preg_match('/(\d+)M/', $duration, $match);
$m = filter_var($match[0], FILTER_SANITIZE_NUMBER_INT).":";
preg_match('/(\d+)S/', $youtube_date, $match);
$s = filter_var($match[0], FILTER_SANITIZE_NUMBER_INT);
echo: "Duration: " . $h.$m.$s;
次の php 関数を使用すると、YouTube ビデオの長さが返されます。よりエキサイティングなコードについては、このリンクをたどって コード サンプルを増やしてください。
function getYoutubeDuration($vid)
{
$videoDetails =file_get_contents("https://www.googleapis.com/youtube/v3/videos?id=".$vid."&part=contentDetails&key=AIzaSyDen99uTRRPl9VT_Ra9eAisvZSc4aZDEns");
$videoDetails =json_decode($videoDetails, true);
foreach ($videoDetails['items'] as $vidTime)
{
$youtube_time = $vidTime['contentDetails']['duration'];
preg_match_all('/(\d+)/',$youtube_time,$parts);
$hours = (strlen(floor($parts[0][0]/60))<1)?floor($parts[0][0]/60):'0'.floor($parts[0][0]/60);
$minutes = $parts[0][0]%60; (strlen($parts[0][0]%60)<1)?$parts[0][0]%60:'0'.$parts[0][0]%60;
$seconds = $parts[0][1];(strlen($parts[0][1])<1)?$parts[0][1]:'0'.$parts[0][1];
return $hours.":".$minutes.":".$seconds;
}
}
echo getYoutubeDuration('J1lb3qJgfho');