将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 }