Как конвертировать продолжительность API YouTube (длительность ISO 8601 в формате PT # M # S) в секундах

Как я могу манипулировать временем даты в формате PT # M # S с JavaScript?

например: PT5M33S

Я хотел бы выводить как hh:mm:ss.

Ответ 1

Вот базовый код, чтобы получить общее количество секунд и других частей. Я чувствую себя неловко, делая это, поскольку правило говорит, что в любое время, когда вы хотите, чтобы логика даты вы не должны были:) Но в любом случае, здесь все идет - Google сделал это нелегко, предоставляя общее количество секунд в API проигрывателя getduration и предоставляя совершенно разные формат в 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;
          }

Ответ 2

Вот как вы можете получить видеоданные youtube через API Youtube (v3) простым способом и конвертировать продолжительность видео (ISO 8601) в секунды. Не забудьте изменить атрибут {YOUR VIDEO ID} и {YOUR KEY} в URL-адресе вашего идентификатора видео и общедоступный ключ google. Вы можете создать открытый ключ, доступ к консоли разработчика 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);
    }

Ответ 3

Хотя эти ответы технически правильны; вы должны проверить momentjs, если вы планируете много работать со временем и продолжительностью. Также проверьте момента-длительность-форматы, что делает длительность форматирования столь же простой, как и обычный момент timejs

Пример того, насколько легко эти 2 модуля делают это

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

который выведет 05:33. И там много других применений.

Хотя есть причина, по которой youtube использует формат ISO8601, так как это стандарт, поэтому имейте это в виду.