在JS秒表中格式化毫秒

时间:2015-11-03 06:05:46

标签: javascript datetime time

我基本上有一个完成的秒表,除了毫秒之外。我只想显示毫秒的2位数,但我遇到了问题。这是我用来格式化时间输出的函数:

function timeFormatter(timeInMilliseconds) {
  var time = new Date(timeInMilliseconds);
  var minutes = time.getMinutes().toString();
  var seconds = time.getSeconds().toString();
  var milliseconds = time.getMilliseconds().toString().slice(0, 2);

  if (minutes.length < 2) { minutes = '0' + minutes; }
  if (seconds.length < 2) { seconds = '0' + seconds; }
  if (milliseconds.length < 2) { milliseconds = '0' + milliseconds; }

  return minutes + ' : ' + seconds + ' . ' + milliseconds;
}

问题

例如,当我为此函数输入3093时,输出为00 : 03 . 93

当我给函数输入3105(应该大于前一个)时,输出为00 : 03 . 10。换句话说,我的秒表会回来几毫秒。

我不确定如何解决这个问题,任何帮助都将不胜感激。

3 个答案:

答案 0 :(得分:3)

你想要的是Number.prototype.toFixed

var hundredths = (time.getMilliseconds()/10).toFixed(2);

你真的不是在寻找毫秒(千分之一秒,可以是三位数,0-999),你正在寻找百分之一秒。所以你需要毫秒,除以10,然后舍入。那将给你百分之一秒的数字。如果您需要前导零,您可以添加它:

var hundredths= (time.getMilliseconds()/10).toFixed(0);
if(hundredths.length < 2) hundredths= "0" + hundredths;

请注意Number.prototype.toFixed返回一个字符串,而不是一个数字。

答案 1 :(得分:0)

您可以使用简单的 pad 功能,例如:

/* Pad num with leading zeros to minimum length
** If number length is equal to or greater than minimum length,
** return it unmodified.
**
** @param {number} num    - number to pad
** @param {number} length - minimum length of padded number
*/
function pad(num, length) {
  if ((''+num).length >= length) return num;
  var lead = '0' + new Array(length).join('0')
  return (lead + num).slice(-length);
}

document.write(pad(23,5)); // 00023
document.write('<br>' + pad(223,2)); // 223

然后删除所有 if 语句并使用:

 return pad(minutes,2) + ' : ' + pad(seconds,2) + ' . ' + pad(milliseconds,3);

答案 2 :(得分:-2)

只需尝试此代码即可启动,停止并重置定时器

var elem = document.getElementById("my-stopwatch");
var timer = new Stopwatch(elem, {delay: 10});

// start the timer
timer.start();

// stop the timer
timer.stop();

// reset the timer
timer.reset();