2013-09-30 165 views
3

我有一個持續時間字符串「PT1M33S」。 我想用下面的格式得到結果 - > 01:33 任何人都可以請告訴我如何使用js或jquery?將ISO 8601時間格式轉換爲正常持續時間

+1

「PT1M:33S」看起來不像有效的ISO 8601日期。最接近的格式是「YYYY-MM-DDTHH:mm:ss」。 – Pavlo

+0

其實我是在提取youtube視頻,我將視頻的持續時間設置爲「PT1M33S」,現在我需要將它轉換爲正常的時間格式 – user2091061

+0

你可以用一個簡單的正則表達式來解析它,或者你可以看看'durationMs '(持續時間以毫秒爲單位),youtube API也提供,更適合您的需求... – CBroe

回答

11

這似乎不是時間格式,只是視頻的持續時間。

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

^h - 小時
米 - 分鐘
S-秒

那麼試試這個

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

Fiddle例如,可以用一個簡單的正則表達式一個做得太。

希望你能理解。

+1

謝謝... !!它是一個非常簡單的...!喜歡它 – user2091061

+0

非常聰明的解決方案 – mhlavacka

+0

,但不會用單位數分鐘或秒 - 「PT2H1M5S」-2:1:5 – mhlavacka

4

可以匹配數字和墊他們格式 -

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 

/*返回值:(字符串) 01:33 */

+0

謝謝...!不錯的一個 – user2091061

0

我喜歡這個答案,因爲它很簡單,但是,如果分鐘或秒數小於10,則會產生奇怪的結果,例如10:04返回爲10:4。

所以我加了一些簡單的功能,以進一步分析和重新組裝時間字符串:

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

我個人使用:

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(":") 
} 
+0

工程出色,非常好的一段代碼,輸出格式準備好的時間t o使用。 – brasofilo

相關問題