如何获取youtube iframe的当前时间但不是十进制的?

问题描述

我正在使用 YouTube iframe API 来获取视频的当前时间。问题是 getCurrentTime() 给出的是十进制数,而不是您在 iframe 播放器上看到的时间。

<html>
<body>
<div id="player"></div>
<script>
      var tag = document.createElement('script');

      tag.src = "https://www.youtube.com/iframe_api";
      var firstScriptTag = document.getElementsByTagName('script')[0];
      firstScriptTag.parentNode.insertBefore(tag,firstScriptTag);

      var player;
      function onYouTubeIframeAPIReady() {
        player = new YT.Player('player',{
          height: '390',width: '640',videoId: 'PkZNo7MFNFg',events: {
            'onReady': onPlayerReady,'onStateChange': onPlayerStateChange
          }
        });
      }

      function onPlayerReady(event) {
        event.target.playVideo();
      }

      function onPlayerStateChange(event) {
        console.log(player.getCurrentTime());
      }
</script>
</body>
</html>

有没有办法获取视频播放器上显示的时间?

解决方法

您可以使用此脚本将十进制时间转换为正常时间:

function minTommss(minutes){
 var sign = minutes < 0 ? "-" : "";
 var min = Math.floor(Math.abs(minutes));
 var sec = Math.floor((Math.abs(minutes) * 60) % 60);
 return sign + (min < 10 ? "0" : "") + min + ":" + (sec < 10 ? "0" : "") + sec;
}

或者使用moment.js:

function formatMinutes(mins){
  return moment().startOf('day').add(mins,'minutes').format('m:ss');
}

根据API getCurrentTime()

返回自视频开始播放以来经过的时间(以秒为单位)。

,

我想通了。在这里,对于有一天可能需要这样做的其他人。请记住,时间以秒为单位。

function convertTime(time){
        let hours = time/3600;
        let minutes = (hours - Math.floor(hours)) * 60;
        let seconds = time % 60;

        hours = Math.floor(hours);
        minutes = Math.floor(minutes);
        seconds = Math.floor(seconds);

        if ((minutes + "").length == 1){
            minutes = "0" + minutes;
        }

        if ((seconds + "").length == 1){
            seconds = "0" + seconds;
        }

        return hours + ":" + minutes + ":" + seconds;
}