将ISO 8601时间格式转换为正常持续时间

我有一个持续时间字符串“PT1M33S”。 我想得到以下格式的结果 – > 01:33有谁能告诉我如何使用js或jquery?

这似乎不是时间格式,只是video的持续时间。

  ------ 33 Seconds '' PT1M33S '------- 1 Minute 

H – 小时
M – 分钟
S-秒

所以试试吧

 var timeD = "PT1M33S"; var formattedTime = timeD.replace("PT","").replace("H",":").replace("M",":").replace("S","") alert(formattedTime); 

例如, 小提琴也可以用简单的正则表达式完成。

希望你能理解。

您可以匹配数字并填充它们以格式化 –

 var string= "PT1M33S", array=string.match(/(\d+)(?=[MHS])/ig)||[]; var formatted=array.map(function(item){ if(item.length<2) return '0'+item; return item; }).join(':'); formatted 

/ *返回值:(String)01:33 * /

我个人用这个:

 function parseDuration(e){var n=e.replace(/D|H|M/g,":").replace(/P|T|S/g,"").split(":");if(1==n.length)2!=n[0].length&&(n[0]="0"+n[0]),n[0]="0:"+n[0];else for(var r=1,l=n.length-1;l>=r;r++)2!=n[r].length&&(n[r]="0"+n[r]);return n.join(":")} 

格式相同的代码:

 function parseDuration(e){ var n = e.replace(/D|H|M/g,":").replace(/P|T|S/g,"").split(":"); if(1 == n.length) 2!=n[0].length && (n[0]="0"+n[0]),n[0]="0:"+n[0]; else for(var r=1, l=n.length-1; l>=r;r++) 2!=n[r].length && (n[r]="0"+n[r]); return n.join(":") } 

我喜欢这个答案,因为它很简单,但是,如果分钟或秒小于10,它会产生奇怪的结果,例如,10:04以10:4的forms返回。

所以我添加了一些简单的函数来进一步解析和重新组合时间字符串:

 function formatTimeSeg(segment) { newSegment = segment; segLength = segment.length; if(segLength==1){ newSegment = '0'+segment; } return newSegment; } extractedTime = duration.replace("PT","").replace("H",":").replace("M",":").replace("S","") extractedTime = extractedTime.split(':'); timeLength = extractedTime.length; switch(timeLength) { case 3: hours=extractedTime[0];minutes=extractedTime[1];seconds=extractedTime[2]; minutes = formatTimeSeg(minutes); seconds = formatTimeSeg(seconds); formattedTime = hours+':'+minutes+':'+seconds; break; case 2: minutes=extractedTime[0];seconds=extractedTime[1]; minutes = formatTimeSeg(minutes); seconds = formatTimeSeg(seconds); formattedTime = minutes+':'+seconds; break; case 1: seconds=extractedTime[0]; seconds = formatTimeSeg(seconds); formattedTime = '0:'+seconds; break }