转换小时,分钟到秒通过解析youtube t= queryparam在javascript/JQuery

Converting hours,minutes into seconds by parsing youtube t= queryparam in javascript/JQuery

本文关键字:youtube queryparam JQuery javascript 分钟 小时 转换      更新时间:2023-09-26

我想在youtube url("http://youtu.be/O4tzHn-EuHc?t=1h5m16s")中解析时间戳t=并计算我需要传递的秒总数作为嵌入youtube url "http://www.youtube.com/embed/XGSy3_Czz8k?start="的开始参数

要获得小时,分钟和秒,我使用reg-exp's如下所示。让我知道任何改进可以在代码中完成,使其简单。

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>

我认为codereview是获取代码注释的一个很好的来源。

你可以去掉你的String。通过稍微调整正则表达式来替换调用,如下所示:

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参数的范围。

我认为最简单的是使用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 * 1parseInt的快捷方式。还要注意,replace将返回一个字符串—如果需要,不要忘记转换为数字。

试试这个

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]);