2013-09-27 14 views
10

Jak zmienić datę w formacie PT # M # S przy użyciu JavaScript?Jak przekonwertować czas trwania interfejsu YouTube API (czas trwania ISO 8601 w formacie PT # M # S) do sekund

na przykład: PT5M33S

Chciałbym wyprowadzane jako hh:mm:ss.

+1

Fiddle: https://jsfiddle.net/Daugilas/kbeb0p99/1/ –

+1

@Daugilas Kakaras Very nice! Ale musisz zaktualizować funkcję. Gdy format taki jak P1D - (jeden dzień) funkcja nie działa. –

+1

@ Serhiog.Lazin, prawda - zaktualizowano: https://jsfiddle.net/kbeb0p99/4/ * po dość długim czasie :) –

Odpowiedz

19

Oto podstawowy kod, aby uzyskać całkowitą liczbę sekund i innych części. Czuję się tym nieswojo, ponieważ reguła mówi, że za każdym razem, gdy chcesz logikować się w randkę, nie powinieneś tego robić :) Ale tak czy inaczej, tutaj to idzie - Google sprawiło, że nie było łatwo, zapewniając całkowite sekundy w API odtwarzacza getduration i zapewniając całkowicie inny format w gdacie 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

dzięki, z odrobiną poprawek sprawiłem, że działał tak, jak potrzebowałem. – Nicholas

+0

Co powiesz na 'duration:" PT26M "' –

4

Oto w jaki sposób można uzyskać dane wideo YouTube za pośrednictwem Youtube API (v3) w prosty sposób i czas konwersji wideo (ISO 8601) do sekundy. Nie zapomnij, aby zmienić swój identyfikator {WIDEO} i {} swój klucz atrybut URL do wideo id i swojej google klucza publicznego. Możesz utworzyć klucz publiczny uzyskując dostęp do konsoli programistów 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

Co powiesz na 'duration:" PT26M "' –

0

Podczas gdy te odpowiedzi są poprawne technicznie; powinieneś sprawdzić momentjs, jeśli planujesz dużo czasu i czasu. Również sprawdzić moment-duration-formats co sprawia, że ​​czas trwania formatowania tak proste jak regularne momentjs czasie

Przykładem, jak łatwo te 2 moduły uczynić ten

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

że wyświetli 05:33. Istnieje wiele innych zastosowań.

Chociaż istnieje powód, dla którego youtube używa formatu ISO8601, ponieważ jest to standard, więc miej to na uwadze.

Powiązane problemy