Tìm kiếm trang web

Chuyển đổi mili giây sang phút và giây bằng Javascript


API của Soundcloud cung cấp thời lượng của các bài hát dưới dạng mili giây. JSON trông như sau:

"duration": 298999

Tôi đã thử nhiều hàm mà tôi tìm thấy ở đây nhưng không thành công. Tôi chỉ đang tìm một thứ gì đó để chuyển con số đó thành một thứ gì đó trông giống như thế này:

4:59

Đây là một cái gần đúng, nhưng không hoạt động. Nó không dừng giây lại ở 60. Nó chạy hết lên tới 99, điều này không hợp lý. Thử nhập "187810" làm giá trị của ms, ví dụ.

var ms = 298999,
min = Math.floor((ms/1000/60) << 0),
sec = Math.floor((ms/1000) % 60);

console.log(min + ':' + sec);

Cảm ơn vì sự giúp đỡ của bạn!

Nếu bạn có thể thêm hỗ trợ cho cả giờ, tôi sẽ rất biết ơn.

Câu trả lời #1

function millisToMinutesAndSeconds(millis) {
  var minutes = Math.floor(millis / 60000);
  var seconds = ((millis % 60000) / 1000).toFixed(0);
  return minutes + ":" + (seconds < 10 ? '0' : '') + seconds;
}

millisToMinutesAndSeconds(298999); // "4:59"
millisToMinutesAndSeconds(60999);  // "1:01"

Như người dùng HelpingHand đã chỉ ra trong phần bình luận, câu lệnh return nên là:

return (
  seconds == 60 ?
  (minutes+1) + ":00" :
  minutes + ":" + (seconds < 10 ? "0" : "") + seconds
);

Câu trả lời #2

Tôi thực sự không chắc tại sao tất cả những câu trả lời này đều phức tạp như vậy. Lớp Date cung cấp cho bạn những gì bạn cần:

const date = new Date(298999);

alert(`${date.getMinutes()}:${date.getSeconds()}`);

Mặc dù những điều trên đáp ứng yêu cầu của op, nhưng tôi thêm phiên bản cập nhật này để phản hồi bình luận của @ianstarz về việc độc lập với múi giờ:

const d = new Date(Date.UTC(0,0,0,0,0,0,298999)),
  // Pull out parts of interest
  parts = [
    d.getUTCHours(),
    d.getUTCMinutes(),
    d.getUTCSeconds()
  ],
  // Zero-pad
  formatted = parts.map(s => String(s).padStart(2,'0')).join(':');

document.write(formatted);

Câu trả lời #3

Với giờ, thêm số 0 vào phút và giây:

var ms = 298999;
var d = new Date(1000*Math.round(ms/1000)); // round to nearest second
function pad(i) { return ('0'+i).slice(-2); }
var str = d.getUTCHours() + ':' + pad(d.getUTCMinutes()) + ':' + pad(d.getUTCSeconds());
console.log(str); // 0:04:59

Bài viết liên quan