Soundcloud的API以毫秒为单位给出其轨迹的持续时间。 JSON看起来像这样:
"duration": 298999
我尝试过很多我在这里找到的功能无济于事。我只是在寻找能够将这个数字转换成如下所示的东西:
4:59
这是一个接近但不起作用的。它并没有停止在60秒。它一直到99没有任何意义。例如,尝试输入“187810”作为ms的值。
var ms = 298999,
min = Math.floor((ms/1000/60) << 0),
sec = Math.floor((ms/1000) % 60);
console.log(min + ':' + sec);
感谢您的帮助!
如果你能在几小时内补充支持,我将不胜感激。
答案 0 :(得分:102)
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语句应为
返回(秒= = 60?(分钟+ 1)+“:00”:分钟+“:”+(秒&lt; 10?“0”:“”)+秒);
答案 1 :(得分:11)
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()
。
答案 2 :(得分:1)
可能有更好的方法可以做到这一点,但它完成了工作:
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);
不确定为什么你有&lt;&lt;在您的分钟线中,操作员,我不认为在显示之前只需要几分钟。
使用%获得剩余的分钟数,可以得到该分钟内经过的秒数百分比,因此将它乘以60会得到秒数和地板数,使其更适合显示,尽管您也可以得到亚秒如果你想要精确度。
如果秒数小于10,则需要显示前导零。
答案 3 :(得分:1)
事件虽然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的东西。
如果您希望跳过小时,则持续时间仅为&lt; 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");
}
}
此时的解决方法已在此Issue中引入。
答案 4 :(得分:1)
这是最好的!
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 您可以根据需要设置此字符串的格式。
答案 5 :(得分:1)
function msToHMS( ms ) {
// 1- Convert to seconds:
var seconds = ms / 1000;
// 2- Extract hours:
var hours = parseInt( seconds / 3600 ); // 3,600 seconds in 1 hour
seconds = seconds % 3600; // seconds remaining after extracting hours
// 3- Extract minutes:
var minutes = parseInt( seconds / 60 ); // 60 seconds in 1 minute
// 4- Keep only seconds not extracted to minutes:
seconds = seconds % 60;
//alert( hours+":"+minutes+":"+seconds);
hours = (hours < 10) ? "0" + hours : hours;
minutes = (minutes < 10) ? "0" + minutes : minutes;
seconds = (seconds < 10) ? "0" + seconds : seconds;
var hms = hours+":"+minutes+":"+seconds;
return hms;
}
答案 6 :(得分:0)
如果要寻找,这是我的贡献
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;
}
}
答案 7 :(得分:0)
可以正常工作:
const minute = Math.floor(( milliseconds % (1000 * 60 * 60)) / (1000 * 60));
const second = Math.floor((ms % (1000 * 60)) / 1000);
答案 8 :(得分:0)
const Minutes = ((123456/60000).toFixed(2)).replace('.',':');
//Result = 2:06
我们将毫秒数(123456)除以60000,以分钟为单位给出相同的数字,此处为2.0576。
toFixed(2)-将数字四舍五入到最接近的两位小数,在此示例中给出的答案为2.06。
然后使用replace将句号换成冒号。
答案 9 :(得分:0)
我的解决方案: 输入:11381(以毫秒为单位) 输出:00:00:11.381
timeformatter(time) {
console.log(time);
let miliSec = String(time%1000);
time = (time - miliSec)/1000;
let seconds = String(time%60);
time = (time - seconds)/60;
let minutes = String(time%60);
time = (time-minutes)/60;
let hours = String(time)
while(miliSec.length != 3 && miliSec.length<3 && miliSec.length >=0) {
miliSec = '0'+miliSec;
}
while(seconds.length != 2 && seconds.length<3 && seconds.length >=0) {
seconds = '0'+seconds;
}
while(minutes.length != 2 && minutes.length<3 && minutes.length >=0) {
minutes = '0'+minutes;
}
while(hours.length != 2 && hours.length<3 && hours.length >=0) {
hours = '0'+hours;
}
return `${hours} : ${minutes} : ${seconds}.${miliSec}`
}
答案 10 :(得分:0)
要将任何以毫秒为单位的数字转换为秒,只需将其乘以 1000 即可解决。
或者你可以创建函数来做到这一点,我认为这是正确的方法。
//convert milliseconds to seconds
function msToSeconds(number) {
return number = number * 1000;
}
记住 单一职责所以不要像这样msToSMHD
答案 11 :(得分:-2)
如果你想显示小时数,这个代码会做得更好,而在秒之后显示几厘秒或几毫秒,如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>