2013-09-27 85 views
10

如何使用JavaScript處理PT#M#S格式的日期時間?如何將YouTube API持續時間(格式爲PT#M#S的ISO 8601持續時間)轉換爲秒

例如:PT5M33S

我想作爲hh:mm:ss輸出。

+1

小提琴:https://jsfiddle.net/Daugilas/kbeb0p99/1/ –

+1

@Daugilas Kakaras非常好!但你需要更新功能。當格式如P1D - (一天)功能不起作用時。 –

+1

@ Serhiog.Lazin,真實 - 更新:https://jsfiddle.net/kbeb0p99/4/ *經過相當長的時間:) –

回答

19

下面是獲取總秒數和其他部分的基本代碼。做這件事我感到不自在,因爲規則說任何時候你想約會邏輯你都不應該:)但是無論如何,在這裏它 - 谷歌讓它變得不容易,在getduration player API中提供總秒數,並且提供完全的gdata api中的不同格式。

  var reptms = /^PT(?:(\d+)H)?(?:(\d+)M)?(?:(\d+)S)?$/; 
      var hours = 0, minutes = 0, seconds = 0, totalseconds; 

      if (reptms.test(input)) { 
      var matches = reptms.exec(input); 
      if (matches[1]) hours = Number(matches[1]); 
      if (matches[2]) minutes = Number(matches[2]); 
      if (matches[3]) seconds = Number(matches[3]); 
      totalseconds = hours * 3600 + minutes * 60 + seconds; 
      } 
+0

謝謝,隨着一點點的調整,我使它的工作正如我所需要的。 – Nicholas

+0

'duration:'PT26M'' –

4

這裏是你如何能以簡單的方式獲得通過的Youtube API(V3) YouTube視頻數據和視頻時長(ISO 8601)轉換爲秒。不要忘了在URL中的{視頻ID}{你的關鍵}屬性更改爲視頻ID和你公開谷歌的關鍵。您可以創建一個訪問Google開發者控制檯的公共密鑰。

$.ajax({ 
     url: "https://www.googleapis.com/youtube/v3/videos?id={ YOUR VIDEO ID }&part=contentDetails&key={ YOUR KEY }", 
     dataType: "jsonp", 
     success: function (data) { youtubeCallback (data); } 
    }); 

    function youtubeCallback(data) { 

     var duration = data.items[0].contentDetails.duration; 
     alert (convertISO8601ToSeconds (duration)); 
    }   

    function convertISO8601ToSeconds(input) { 

     var reptms = /^PT(?:(\d+)H)?(?:(\d+)M)?(?:(\d+)S)?$/; 
     var hours = 0, minutes = 0, seconds = 0, totalseconds; 

     if (reptms.test(input)) { 
      var matches = reptms.exec(input); 
      if (matches[1]) hours = Number(matches[1]); 
      if (matches[2]) minutes = Number(matches[2]); 
      if (matches[3]) seconds = Number(matches[3]); 
      totalseconds = hours * 3600 + minutes * 60 + seconds; 
     } 

     return (totalseconds); 
    } 
+0

'duration:'PT26M'''' –

0

儘管這些答案在技術上是正確的,如果你打算用時間和持續時間做很多事情,你應該檢查出momentjs。還檢查了moment-duration-formats這使得格式化的持續時間,就像普通momentjs時間

這些2個模塊多麼容易使這個

moment.duration('PT5M33S').format('hh:mm:ss') 

將輸出05:33的例子一樣簡單。還有很多其他用途。

雖然有一個原因youtube使用ISO8601格式,因爲它是一個標準,所以請記住。

相關問題