#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 было введено в этом выпуске.