2013-09-27 107 views
10

Làm cách nào để tôi có thể thao tác thời gian ngày theo định dạng PT # M # S với JavaScript?Cách chuyển đổi thời lượng API YouTube (thời gian ISO 8601 ở định dạng PT # M # S) thành giây

ví dụ: PT5M33S

Tôi muốn đầu ra như hh:mm:ss.

+1

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

+1

@Daugilas Kakaras Rất đẹp! Nhưng bạn cần cập nhật chức năng. Khi định dạng như chức năng P1D - (một ngày) không hoạt động. –

+1

@ Serhiog.Lazin, đúng - cập nhật: https://jsfiddle.net/kbeb0p99/4/ * sau một thời gian khá dài :) –

Trả lời

19

Đây là mã cơ bản để nhận tổng số giây và các phần khác. Tôi cảm thấy khó chịu khi thực hiện điều này, vì quy tắc nói rằng bất cứ khi nào bạn muốn hẹn hò với logic thì bạn không nên :) Nhưng dù sao, ở đây nó đi - Google làm cho nó không dễ dàng, cung cấp tổng số giây trong API trình phát getduration và cung cấp hoàn toàn định dạng khác trong api gdata.

  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

cảm ơn, Với một chút tinh chỉnh tôi đã làm cho nó hoạt động đúng như tôi cần. – Nicholas

+0

Làm thế nào về 'thời gian:" PT26M "' –

4

Đây là cách bạn có thể nhận được một dữ liệu video youtube qua Youtube API (v3) một cách đơn giản và chuyển đổi thời lượng video (ISO 8601) để giây. Đừng quên để thay đổi {ID video của bạn}{KEY CỦA BẠN} thuộc tính trong URL để Id video của bạngoogle công của bạn chính. Bạn có thể tạo khóa công khai truy cập bảng điều khiển dành cho nhà phát triển của 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

Làm thế nào về 'thời gian:" PT26M "' –

0

Mặc dù các câu trả lời này là chính xác về mặt kỹ thuật; bạn nên kiểm tra momentjs nếu bạn dự định thực hiện nhiều thời gian và thời lượng. Ngoài ra kiểm tra moment-duration-formats mà làm cho khoảng thời gian định dạng chỉ đơn giản như momentjs thường xuyên thời gian

Một ví dụ về cách dễ dàng những 2 module làm này

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

rằng sẽ ra 05:33. Và có rất nhiều cách sử dụng khác.

Mặc dù có lý do youtube sử dụng định dạng ISO8601 vì nó là tiêu chuẩn, do đó hãy ghi nhớ điều đó.