Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/405.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/89.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过在javascript/JQuery中解析youtube t=queryparam将小时、分钟转换为秒_Javascript_Jquery - Fatal编程技术网

通过在javascript/JQuery中解析youtube t=queryparam将小时、分钟转换为秒

通过在javascript/JQuery中解析youtube t=queryparam将小时、分钟转换为秒,javascript,jquery,Javascript,Jquery,我想解析youtube url(“”)中的时间戳t=并计算作为嵌入youtube url的开始参数需要传递的总秒数 为了获得小时、分钟和秒数,我使用了如下reg exp。让我知道可以在代码中进行任何改进以使其变得简单 var url ="http://youtu.be/XGSy3_Czz8k?t=1h5m16s"; var timeStamp = url.match("t=(.)*?[&|(\s)]"); var hours = timeStamp[0].match(/(\d)+h/);

我想解析youtube url(“”)中的时间戳t=并计算作为嵌入youtube url的开始参数需要传递的总秒数

为了获得小时、分钟和秒数,我使用了如下reg exp。让我知道可以在代码中进行任何改进以使其变得简单

var url ="http://youtu.be/XGSy3_Czz8k?t=1h5m16s";
var timeStamp = url.match("t=(.)*?[&|(\s)]");
var hours = timeStamp[0].match(/(\d)+h/); 
var minutes = timeStamp[0].match(/(\d)+m/);
var seconds = timeStamp[0].match(/(\d)+s/);

var totalTimeInSeconds = 0;

if (hours) {
  hours = hours[0].replace("h","");
  totalTimeInSeconds += hours * 60 * 60;
}

if (minutes) {
    minutes = minutes[0].replace("m","");
    totalTimeInSeconds += minutes * 60;
}

if (seconds) {
   seconds = seconds[0].replace("s","")
   totalTimeInSeconds += seconds * 1;
}

console.log("hours:"+hours);
console.log("minutes:"+minutes);
console.log("seconds:"+seconds);
console.log("TotalTimeInSeconds:"+ totalTimeInSeconds);


<iframe width="420" height="345"
 src="http://www.youtube.com/embed/XGSy3_Czz8k?start="+totalTimeInSeconds>
 </iframe>
var url=”http://youtu.be/XGSy3_Czz8k?t=1h5m16s";
var timeStamp=url.match(“t=()*?[&|(\s)]”;
var hours=时间戳[0]。匹配(/(\d)+h/);
var minutes=时间戳[0]。匹配(/(\d)+m/);
var seconds=时间戳[0]。匹配(/(\d)+s/);
var totalTimeInSeconds=0;
若有(小时){
小时数=小时数[0]。替换(“h”,替换为“);
totalTimeInSeconds+=小时*60*60;
}
若有(分钟){
分钟=分钟[0]。替换为(“m”,替换为“);
totalTimeInSeconds+=分钟*60;
}
如果(秒){
秒=秒[0]。替换(“s”,“”)
totalTimeInSeconds+=秒*1;
}
控制台日志(“小时:+小时);
console.log(“分钟数:+分钟数”);
console.log(“秒:+秒);
log(“TotalTimeInSeconds:+TotalTimeInSeconds”);

我认为获得代码评论的好来源是

您可以删除字符串。通过稍微调整正则表达式使其如下所示来替换调用:

var hours = timeStamp[0].match(/(\d+)h/); 
var minutes = timeStamp[0].match(/(\d+)m/);
var seconds = timeStamp[0].match(/(\d+)s/);
if (hours) {
  totalTimeInSeconds += parseInt(hours[1], 10) * 60 * 60;
}

if (minutes) {
    totalTimeInSeconds += minutes[1] * 60;
}

if (seconds) {
   totalTimeInSeconds += seconds[1];
}
使用这些正则表达式,您可以一次捕获所有数字,然后像这样使用它们:

var hours = timeStamp[0].match(/(\d+)h/); 
var minutes = timeStamp[0].match(/(\d+)m/);
var seconds = timeStamp[0].match(/(\d+)s/);
if (hours) {
  totalTimeInSeconds += parseInt(hours[1], 10) * 60 * 60;
}

if (minutes) {
    totalTimeInSeconds += minutes[1] * 60;
}

if (seconds) {
   totalTimeInSeconds += seconds[1];
}
这里不需要使用
parseInt
, 但我可能会引入它,以便更明确地说明转换正在发生。我还建议调整
timeStamp
变量的正则表达式,这样它就可以进一步缩小
t
参数的范围。

试试这个

var url ="http://youtu.be/XGSy3_Czz8k?t=1h5m16s";
    var timeStamp = url.match("t=(.)*?[&|(\s)]");
    timeStampSplitted = timeStamp[0].replace("t=","").replace("h", ":").replace("m", ":").replace("s", "").split(':');

    // minutes are worth 60 seconds. Hours are worth 60 minutes.
    var seconds = (+timeStampSplitted[0]) * 60 * 60 + (+timeStampSplitted[1]) * 60 + (+timeStampSplitted[2]);

我认为最简单的方法是使用
RegExp
replace
函数:

var seconds = "1h5m16s".replace(/([0-9]+)h([0-9]+)m([0-9]+)s/, function(match, p1, p2 ,p3) {
  return p1 * 60 * 60 + p2 * 60 + p3 * 1
})

p3*1
-它是
parseInt
的快捷方式。另外请注意,
replace
将返回一个字符串-如果需要,请不要忘记将其转换为数字。

您知道Moment.js吗?这是最好的插件,操作日期而不令人心碎。看一看,当t=1h45s时(YouTube时间戳中的小时、分钟和秒都是可选的),这将失败。当t=1h45s时,这将失败(YouTube时间戳中的小时、分钟和秒都是可选的)。