Javascript 将毫秒从3位数更改为2位数
我在制作秒表时遇到了麻烦,它的毫秒部分只使用了2位数字。我有满满一本书。我需要一些帮助的函数是Javascript 将毫秒从3位数更改为2位数,javascript,datetime,Javascript,Datetime,我在制作秒表时遇到了麻烦,它的毫秒部分只使用了2位数字。我有满满一本书。我需要一些帮助的函数是formatter()方法 现在,该方法如下所示: formatter(timeInMilliseconds) { const padZero = (time) => { while (time.length < 2) { time = '0' + time; } return time; } let time = new Date(t
formatter()
方法
现在,该方法如下所示:
formatter(timeInMilliseconds) {
const padZero = (time) => {
while (time.length < 2) {
time = '0' + time;
}
return time;
}
let time = new Date(timeInMilliseconds);
let minutes = padZero(time.getMinutes().toString());
let seconds = padZero(time.getSeconds().toString());
let milliseconds = padZero((time.getMilliseconds() / 10).toFixed(0));
let output = `${minutes} : ${seconds} . ${milliseconds}`;
console.log(output);
return output;
}
格式化程序(时间单位毫秒){
常数padZero=(时间)=>{
而(time.length<2){
时间='0'+时间;
}
返回时间;
}
let time=新日期(timein毫秒);
让minutes=padZero(time.getMinutes().toString());
让seconds=padZero(time.getSeconds().toString());
设毫秒=padZero((time.getmillized()/10).toFixed(0));
让输出=`${minutes}:${seconds}.${millides}`;
控制台日志(输出);
返回输出;
}
在大多数情况下,它是有效的。但是,如果在计时器运行时查看我的JSFIDLE控制台,问题是非常明显的。例如,如果秒表当前处于类似00:15的位置。99,它将变成00:15。100
而不是00:16。00
任何帮助都将不胜感激。您可以使用substring()
toFixed
循环而不是截断,因此995毫秒及以上将变为99.5毫秒,并通过toFixed
格式化为100
。您可以将其转换为整数,然后转换为字符串以截断它:
let milliseconds = padZero('' + (time.getMilliseconds() / 10 | 0));
让padZero
接受一个数字而不是一个字符串也是一个很好的简化:
function padZero(time) {
return time < 10 ? '0' + time : '' + time;
}
let time = new Date(timeInMilliseconds);
let minutes = padZero(time.getMinutes());
let seconds = padZero(time.getSeconds());
let milliseconds = padZero(time.getMilliseconds() / 10 | 0);
let output = `${minutes} : ${seconds} . ${milliseconds}`;
您的问题是.toFixed()
循环而不是截断
(99.4).toFixed(0) == '99'
(99.5).toFixed(0) == '100'
你所需要做的就是更换
(time.getMilliseconds() / 10).toFixed(0)
与
它会起作用。如果有人建议我改进我的问题,而不是投反对票,我会很感激的。这不会解决会议记录的部分。我正在寻找一种不同的方式来做这件事。我知道我可以只取毫秒的子字符串,手动更新分钟部分,但这对我来说似乎很难。请看其他答案中的一个。向上投票,谢谢。我将同意约书亚的回答,因为涉及的皈依较少,但我感谢你花时间回答@我的荣幸!顺便说一句,我希望“更少的转换”是关于可读性而不是性能的,因为可读性才是更重要的。(这和|0
比数学快。floor
和到fixed
的转换到字符串的速度更慢。)是的,这是关于可读性的,但我想我还是会支持你的设计。我真的很感谢你对这件事如此透彻,并展示了一种更好/更准确的方法。谢谢
(99.4).toFixed(0) == '99'
(99.5).toFixed(0) == '100'
(time.getMilliseconds() / 10).toFixed(0)
Math.floor(time.getMilliseconds() / 10).toFixed(0)