受け入れられた回答のコードはかなり乱雑だと思います。また、時間をカバーしていません。#
また、YouTubeがURLを削除したと思います。Advanced Responsive VideoEmbedderWordPressプラグイン内にこの関数をコーディングしています。受け入れられた答えと比較して、かなりきれいにコード化されており、理解しやすいと思います。
これが誰かに役立つことを願っています。
2019年に更新され、(int)部分がh / m/s文字を削除していることに注意してください。私は改善のための提案を受け入れています。
/**
* Calculates seconds based on youtube times
*
* @author Nicolas Jonas
* @license GPLv3
* @link http://nextgenthemes.com
*
* @param string $yttime The '1h25m13s' part of youtube URLs
*
* @return int Starttime in seconds
*/
function youtube_time_to_seconds( $yttime ) {
$matches['h'] = 0;
$matches['m'] = 0;
$matches['s'] = 0;
$pattern = '/' .
'(?<h>[0-9]+h)?' .
'(?<m>[0-9]+m)?' .
'(?<s>[0-9]+s)?/';
preg_match( $pattern, $yttime, $matches );
return ( (int) $matches['h'] * 60 * 60 ) +
( (int) $matches['m'] * 60 ) +
(int) $matches['s'];
}
refの古いコード。ケース1h2sを考慮しません:
/**
* Calculates seconds based on youtube times
*
* @author Nicolas Jonas
* @license GPLv3
* @link http://nextgenthemes.com
*
* @param string $yttime The '1h25m13s' part of youtube URLs
*
* @return int Starttime in seconds
*/
function youtube_time_to_seconds( $yttime ) {
$format = false;
$hours = $minutes = $seconds = 0;
$pattern['hms'] = '/([0-9]+)h([0-9]+)m([0-9]+)s/'; // hours, minutes, seconds
$pattern['ms'] = '/([0-9]+)m([0-9]+)s/'; // minutes, seconds
$pattern['h'] = '/([0-9]+)h/';
$pattern['m'] = '/([0-9]+)m/';
$pattern['s'] = '/([0-9]+)s/';
foreach ( $pattern as $k => $v ) {
preg_match( $v, $yttime, $result );
if ( ! empty( $result ) ) {
$format = $k;
break;
}
}
switch ( $format ) {
case 'hms':
$hours = $result[1];
$minutes = $result[2];
$seconds = $result[3];
break;
case 'ms':
$minutes = $result[1];
$seconds = $result[2];
break;
case 'h':
$hours = $result[1];
break;
case 'm':
$minutes = $result[1];
break;
case 's':
$seconds = $result[1];
break;
default:
return false;
}
return ( $hours * 60 * 60 ) + ( $minutes * 60 ) + $seconds;
}
出典:Github
次のように使用できます。
これは、URL全体を再定義する代わりに、URLとパラメーターを解析します。これは、これを行うためのより優れた、より信頼性の高い方法parse_url
です。parse_str
$urls[] = 'http://youtu.be/vrXgLhkv21Y';
$urls[] = 'http://youtu.be/vrXgLhkv21Y?t=foobar';
$urls[] = 'http://youtu.be/vrXgLhkv21Y?foo=bar&t=4s';
$urls[] = 'http://youtu.be/vrXgLhkv21Y?t=1h19m14s';
$urls[] = 'http://youtu.be/vrXgLhkv21Y?t=19m14s';
$urls[] = 'http://youtu.be/vrXgLhkv21Y?t=2h';
$urls[] = 'http://youtu.be/vrXgLhkv21Y?t=5m';
$urls[] = 'http://youtu.be/vrXgLhkv21Y?t=50s';
#extract the part after the &t= in urls and run the function if exists
foreach( $urls as $url ) {
$parsed_url = parse_url( $url );
if ( empty( $parsed_url['query'] ) )
continue;
parse_str( $parsed_url['query'], $args );
if ( empty( $args['t'] ) )
continue;
echo youtube_time_to_seconds( $args['t'] ) . "\n";
}
出力:
4
4754
1154
7200
300
50