ご質問のコードではインターバルが1秒単位となっているので「setIntervalが指定インターバルを正確に刻む」という前提で残り時間の表示を計算するなら、ミリ秒単位は常に"000"という前提を置くはずであり、それを表示することに意味はないと思います。
一方「ハンドラーが実際に起動された時間により残り時間をミリ秒単位で表示したい」なら、Dateにより経過時間をミリ秒単位で求めるとよいと思います。
なお、MM:ss.mmmという特別なフォーマットにするためformatMillisという関数を定義してみました。
秒以下を浮動小数点数として扱いtoFixed(3)としてもよいのですが、どのみち秒と分を2桁で0埋めする必要があるので、それ用の関数f0を定義しています。
javascript
1var startRest = 120*1000; // 初期の残り時間
2var rest = startRest;
3
4var startMs = +new Date();
5setInterval(countDown, 1000);
6
7function countDown() {
8 var elapsed = +new Date() - startMs;
9 rest = startRest - elapsed;
10
11 var display = formatMillis(rest)
12 console.log(display)
13}
14
15// ミリ秒をMM:ss.mmm (M=分,s=秒,m=ミリ秒)の形式でフォーマットする
16function formatMillis(millis) {
17 function f0(s, n) {
18 s = "" + s;
19 return "0".repeat(Math.max(0, n - s.length)) + s;
20 }
21 var t = Math.abs(millis);
22 var ms = t % 1000;
23 var sec = Math.floor(t / 1000) % 60;
24 var min = Math.floor(t / 60000);
25 return `${millis < 0 ? "-" : ""}${f0(min, 2)}:${f0(sec, 2)}.${f0(ms, 3)}`;
26}
結果==>
01:58.985
01:57.969
01:56.969
...
00:01.965
00:00.949
-00:00.051
...
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/06/12 00:37
2017/06/12 01:34 編集
2017/06/12 01:42