Преобразование миллисекунд в минуты и секунды с помощью Javascript

Soundcloud API дает длительность треков в миллисекундах. JSON выглядит так:

"duration": 298999

Я пробовал много функций, которые я нашел здесь безрезультатно. Я просто ищу что-то, чтобы преобразовать это число в нечто похожее на следующее:

4:59

Здесь тот, кто подошел, но не работает. Он не останавливает секунд на 60. Он идет до 99, что не имеет смысла. Попробуйте ввести "187810" как значение мс, например.

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

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

Спасибо за вашу помощь!

Если бы вы могли добавить поддержку в течение нескольких часов, я был бы признателен.

Ответы

Ответ 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"

Поскольку пользователь HelpingHand указал в комментариях, оператор return должен быть

return (секунды == 60? (минуты + 1) + ": 00": минуты + ":" + (секунды <10? "0": "") + секунды);

Ответ 2

var ms = 298999;
ms = 1000*Math.round(ms/1000); // round to nearest second
var d = new Date(ms);
console.log( d.getUTCMinutes() + ':' + d.getUTCSeconds() ); // "4:59"

Кроме того, если вы хотите использовать часы, используйте d.getUTCHours().

Ответ 3

Вероятно, есть лучший способ сделать это, но он выполняет свою работу:

var ms = 298999;
var min = ms / 1000 / 60;
var r = min % 1;
var sec = Math.floor(r * 60);
if (sec < 10) {
    sec = '0'+sec;
}
min = Math.floor(min);
console.log(min+':'+sec);

Не знаете, почему у вас есть оператор << на вашей минутной линии, я не думаю, что ему нужно было всего лишь за пол до того, как вы покажете.

Получение оставшейся части минут с% дает вам процент секунд, прошедших в эту минуту, поэтому умножение на 60 дает вам количество секунд и пол, что делает его более подходящим для отображения, хотя вы также можете получить точность в секунду, если вы хотеть.

Если секунд меньше 10, вы хотите отобразить их с начальным нулем.

Ответ 4

Событие, однако, oment.js не предоставляет такую функциональность, если вы придете сюда, и вы уже используете moment.js, попробуйте следующее:

function formatDuration(ms) {
  var duration = moment.duration(ms);
  return Math.floor(duration.asHours()) + moment.utc(duration.asMilliseconds()).format(":mm:ss");
}

Вы получите что-то вроде x: xx: xx.

В случае, если вы можете пропустить час, когда продолжительность составляет всего 60 минут.

function formatDuration(ms) {
  var duration = moment.duration(ms);
  if (duration.asHours() > 1) {
    return Math.floor(duration.asHours()) + moment.utc(duration.asMilliseconds()).format(":mm:ss");
  } else {
    return moment.utc(duration.asMilliseconds()).format("mm:ss");
  }
}

Этот обходной момент в момент был введен в этом выпуске.

Ответ 5

Вот мой вклад, если вы ищете

h:mm:ss

вместо этого, как я был:

function msConversion(millis) {
  let sec = Math.floor(millis / 1000);
  let hrs = Math.floor(sec / 3600);
  sec -= hrs * 3600;
  let min = Math.floor(sec / 60);
  sec -= min * 60;

  sec = '' + sec;
  sec = ('00' + sec).substring(sec.length);

  if (hrs > 0) {
    min = '' + min;
    min = ('00' + min).substring(min.length);
    return hrs + ":" + min + ":" + sec;
  }
  else {
    return min + ":" + sec;
  }
}

Ответ 6

Лучше всего это!

function msToTime(duration) {
var milliseconds = parseInt((duration%1000))
    , seconds = parseInt((duration/1000)%60)
    , minutes = parseInt((duration/(1000*60))%60)
    , hours = parseInt((duration/(1000*60*60))%24);

hours = (hours < 10) ? "0" + hours : hours;
minutes = (minutes < 10) ? "0" + minutes : minutes;
seconds = (seconds < 10) ? "0" + seconds : seconds;

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

Он вернется 00: 04: 21.223 Вы можете отформатировать эту строку тогда, как пожелаете.

Ответ 7

этот код будет работать лучше, если вы хотите показывать часы, а также секунды или миллисекунды после секунд, например 1: 02: 32.21, и если они используются в сотовом телефоне, таймер будет показывать правильное время даже после блокировки экрана.

<div id="timer" style="font-family:monospace;">00:00<small>.00</small></div>

<script>
var d = new Date();
var n = d.getTime();
var startTime = n;

var tm=0;
function updateTimer(){
  d = new Date();
  n = d.getTime();
  var currentTime = n;  
  tm = (currentTime-startTime);
  
  //tm +=1; 
  // si el timer cuenta en centesimas de segundo
  //tm = tm*10;
  
  var hours = Math.floor(tm / 1000 / 60 / 60);
  var minutes = Math.floor(tm / 60000) % 60;
  var seconds =  ((tm / 1000) % 60);
  // saca los decimales ej 2 d{0,2}
  var seconds = seconds.toString().match(/^-?\d+(?:\.\d{0,-1})?/)[0];
  var miliseconds = ("00" + tm).slice(-3);
  var centiseconds;

  
  // si el timer cuenta en centesimas de segundo
  //tm = tm/10;


  centiseconds = miliseconds/10;
  centiseconds = (centiseconds).toString().match(/^-?\d+(?:\.\d{0,-1})?/)[0];

  minutes = (minutes < 10 ? '0' : '') + minutes;
  seconds = (seconds < 10 ? '0' : '') + seconds;
  centiseconds = (centiseconds < 10 ? '0' : '') + centiseconds;
  hours = hours + (hours > 0 ? ':' : '');
  if (hours==0){
    hours='';
  }

  document.getElementById("timer").innerHTML = hours + minutes + ':' + seconds + '<small>.' + centiseconds + '</small>';
}

var timerInterval = setInterval(updateTimer, 10);
// clearInterval(timerInterval);
</script>