Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将毫秒从3位数更改为2位数_Javascript_Datetime - Fatal编程技术网

Javascript 将毫秒从3位数更改为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

我在制作秒表时遇到了麻烦,它的毫秒部分只使用了2位数字。我有满满一本书。我需要一些帮助的函数是
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)