【问题标题】:Convering youtube duration into seconds将 youtube 持续时间转换为秒
【发布时间】:2016-11-05 02:36:09
【问题描述】:

目前,当您获得 youtube 时长时,您会得到类似 PT3M10S 的信息。

下面的代码将其更改为3:10。但是我希望只获得 SECONDS,所以 190 将是输出。

$duration = str_replace(array("PT","M","S"), array("",":",""),$duration);

【问题讨论】:

    标签: php youtube youtube-api


    【解决方案1】:

    您可以尝试使用正则表达式来获取值,然后从那里获取总秒数。比如:

    $duration="PT3M10S";
    $pattern='/PT(\d+)M(\d+)S/';
    preg_match($pattern,$duration,$matches);
    $seconds=$matches[1]*60+$matches[2];
    

    该模式将分钟放入第一组,将秒放入下一组。 $matches 将在调用 preg_match() 后包含匹配的组。 您需要获取第 1 组和第 2 组,因为匹配中的第 0 组是完全匹配的文本。在本例中为“PT3M10S”。

    【讨论】:

    • 我得到 Undefined offset 错误。检查my answer
    【解决方案2】:

    看过here

        $youtube_duration = $vinfo['duration'];
        $interval = new DateInterval(youtube_duration);
        $seconds = $interval->h * 3600 + $interval->i * 60 + $interval->s;
    

    【讨论】:

      【解决方案3】:
      function covtime($youtube_time) {
          preg_match_all('/(\d+)/', $youtube_time, $parts);
          $h = preg_match('/H/', $youtube_time);
          $m = preg_match('/M/', $youtube_time);
          $s = preg_match('/S/', $youtube_time);
          if ($h && $m && $s) {
              $hours = $parts[0][0];
              $minutes = $parts[0][1];
              $seconds = $parts[0][2];
              if ($minutes < 10) {
                  $minutes = '0' . $parts[0][1];
              }
              if ($seconds < 10) {
                  $seconds = '0' . $parts[0][2];
              }
              echo $hours . ':' . $minutes . ':' . $seconds;
          } else if ($h && $m) {
              $hours = $parts[0][0];
              $minutes = $parts[0][1];
              $seconds = '00';
              if ($minutes < 10) {
                  $minutes = '0' . $parts[0][1];
              }
              echo $hours . ':' . $minutes . ':' . $seconds;
          } else if ($m && $s) {
              $minutes = $parts[0][0];
              $seconds = $parts[0][1];
              if ($seconds < 10) {
                  $seconds = '0' . $parts[0][1];
              }
              echo $minutes . ':' . $seconds;
          } else if ($h && $s) {
              $hours = $parts[0][0];
              $minutes = '00';
              $seconds = $parts[0][1];
              if ($seconds < 10) {
                  $seconds = '0' . $parts[0][1];
              }
              echo $hours . ':' . $minutes . ':' . $seconds;
          } else if ($h) {
              $hours = $parts[0][0];
              $minutes = '00';
              $seconds = '00';
              echo $hours . ':' . $minutes . ':' . $seconds;
          } else if ($m) {
              $minutes = $parts[0][0];
              $seconds = '00';
              echo $minutes . ':' . $seconds;
          } else if ($s) {
              $minutes = '0';
              $seconds = $parts[0][0];
              if ($seconds < 10) {
                  $seconds = '0' . $parts[0][0];
              }
              echo $minutes . ':' . $seconds;
          }
      }
      echo covtime(PT1H2M3S);
      

      【讨论】:

      • 我建议您在代码周围添加一些上下文\解释。
      【解决方案4】:
      echo pt2sec("PT3M52S");
      
      function pt2sec($str) {
            preg_match("@PT((?P<hour>[0-9]+)H)?((?P<min>[0-9]+)M)?((?P<sec>[0-9]+)S)?@", $str, $m);
            return (isset($m["hour"])?$m["hour"]*3600:0)+(isset($m["min"])?$m["min"]*60:0)+(isset($m["sec"])?$m["sec"]:0);
      }
      

      【讨论】:

        猜你喜欢
        • 2013-05-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-04
        • 2020-05-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多