2013-09-27 4 views
10

JavaScript를 사용하여 PT # M # S 형식으로 날짜 시간을 조작하려면 어떻게해야합니까? 예를 들어YouTube API 기간 (ISO 8601 기간, 형식 PT # M # S)을 초 단위로 변환하는 방법

: PT5M33S

나는 hh:mm:ss로 출력하고 싶습니다.

+1

피들 : https://jsfiddle.net/Daugilas/kbeb0p99/1/ –

+1

@Daugilas Kakaras 매우 좋습니다! 하지만 기능을 업데이트해야합니다. P1D와 같은 형식 (일일) 기능이 작동하지 않습니다. –

+1

@ Serhiog.Lazin, true - updated : https://jsfiddle.net/kbeb0p99/4/ * 꽤 오래 된 후 :) –

답변

19

총 코드 수는 다음과 같습니다. 규칙에 따라 로직을 원한다면 언제든지 다음과 같이하면 안된다는 느낌이 들지만, 어쨌든 여기에 있습니다. Google은 쉬운 일이 아니며 getduration 플레이어 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

어때'기간 : "PT26M"' –

4

는 간단한 방법으로 유튜브 API (V3)를 통해 YouTube 동영상 데이터를 얻을 초 비디오 지속 시간 (ISO 8601)을 변환 할 수있는 방법이다. 당신의 동영상 ID하고 공개 구글 키에 URL에서 {비디오 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

어때'기간 : "PT26M"' –

0

이러한 대답은 기술적으로 정확합니다. 시간과 기간이 많은 경우에는 momentjs을 확인해야합니다. 또한 일반 momentjs 시간

이 2 개 개의 모듈을 출력 5시 33분이

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

을 얼마나 쉽게의 예처럼 단순한 형식 기간을하게 moment-duration-formats을 확인하십시오. 그리고 다른 많은 용도가 있습니다.

youtube가 표준이기 때문에 ISO8601 형식을 사용하는 이유가 있지만이를 염두에 두시기 바랍니다.

관련 문제