время синтаксического анализа javascript (минуты: секунды) от миллисекунд

#javascript #parsing #time

#javascript #синтаксический анализ #время

Вопрос:

Как преобразовать заданное количество миллисекунд (например, 125230.41294642858 ) в формат времени, подобный: minutes:seconds ?

Ответ №1:

 var ms = 125230.41294642858,
   min = 0|(ms/1000/60),
   sec = 0|(ms/1000) % 60;

alert(min   ':'   sec);
  

Комментарии:

1. Что делает << оператор?

2. @JaredPar — Math.floor с помощью неявного int приведения 🙂

3. @JaredPar — << является оператором побитового сдвига. Я сдвигаюсь на 0 или «ничего не делаю». Однако побитовая математика может выполняться только с целыми числами, а не с плавающими значениями, поэтому в этом есть внутреннее приведение к int inherit . Функционально оно идентично Math.floor(ms/1000/60) для всех чисел < 2 ^ 31 (что я могу с уверенностью предположить), но намного быстрее.

4. Отлично! Как насчет parseInt ?

5. @Shadow Wizard — функционально то же самое, parseInt работает еще медленнее 🙂

Ответ №2:

Попробуйте следующее

 var num = Number(theTextValue);
var seconds = Math.floor(num / 1000);
var minutes = Math.floor(seconds / 60);
var seconds = seconds - (minutes * 60);
var format = minutes   ':'   seconds
  

Ответ №3:

 Number.prototype.toTime = function(){
     var self = this/1000;
     var min = (self) << 0;
     var sec = (self*60) % 60;
     if (sec == 0) sec = '00';

     return min   ':'   sec
};


var ms = (new Number('250')).toTime();
console.log(ms);
=> '0:15'

var ms = (new Number('10500')).toTime();
console.log(ms);
=> '10:30'
  

Ответ №4:

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

 function getFormattedMs(ms) {
  var duration = moment.duration(ms);
  return moment.utc(duration.asMilliseconds()).format("mm:ss");
}
  

Это обходное решение в moment было введено в этом выпуске.