2015-11-03 66 views
1

我基本上有一個完成的秒錶,除了毫秒之外工作。我只想在毫秒內顯示2位數字,但我遇到問題。這是我用來格式化我的時間輸出的功能:在JS秒錶中格式化毫秒

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。換句話說,我的秒錶正在回退幾毫秒。

我不知道如何去解決這個問題,任何幫助將不勝感激。

+1

當你給輸入作爲3105的輸出將是00:3 .105,因爲你是從毫秒是越來越轉換爲00只服用2個數字:3 0.10你需要改變你的邏輯據此來處理這一點。 – Murli

+0

最簡單的是'('00'+毫秒).slice(-3)'。 – RobG

+0

我明白爲什麼這個問題正在發生,我只是不確定如何解決它,而只使用2位數毫秒。 – saadq

回答

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返回一個字符串,而不是數字。

+0

不需要感到尷尬......我不確定你在什麼時區,但是在西海岸這是10點30分的地方,所以如果你在美國,那麼你工作到很晚! –

+0

對不起,只是想說我覺得我的輸出仍然有問題(它仍然不是2位數字)。如果我給代碼輸入'3093',結果是'「00:03.9.30」'。這是我目前的代碼:https://gist.github.com/anonymous/ab7750f8f95d4e0ea506 – saadq

+0

對不起,這是我的錯。它應該'toFixed(0)';你試圖殺死小數點後面的數字,而不是得到兩個額外的數字。 –

-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(); 
+0

不知道你的意思,我沒有實現我的秒錶。 – saadq

+0

這似乎沒有回答這個問題? – ajshort

0

您可以使用一個簡單的功能,如:

/* 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

,那麼你如果聲明和我們刪除所有這些E:

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

事情是我想毫秒只顯示2位數字,而不是3. – saadq

+0

然後做'pad(Math.round(毫秒/ 10),2)'。 ;-) – RobG