2014-03-05 68 views
0

它計數達60秒,然後不是加1分鐘,而是在分鐘之內開始計數。輸出格式爲0:0:0.0 - 時間需要準確並且匹配稱爲W-Split的程序。JavaScript定時器0:0:0.0格式不正確計數

var m=0; 
var s=0; 
var h=0; 

function go(){ 

    var start = new Date().getTime(), 
    elapsed = '0.0'; 

    window.setInterval(function() { 
     var time = new Date().getTime() - start; 
     elapsed = Math.floor(time/100)/10; 

     if (Math.round(elapsed) == elapsed) { 
      elapsed += '.0'; 
     } 

     if (elapsed >= 60) { 
      elapsed = 0; 
      m++; 
     } 

     if (m >= 60) { 
      m = 0; 
      h++; 
     } 

     var totals = h + ":" + m + ":" + elapsed; 
     document.getElementById('output').innerHTML = totals; 
    }, 100); 
} 
+1

對上帝的愛,格式化你的代碼更好! – Claudiu

回答

1

一分鐘大關開始,您elapsed將被設置爲每一次的東西比60更高,觸發你的m++每個週期。您希望每次從零開始計算分鐘數(m = Math.round(elapsed/60)),而不是增加全局分鐘數。與小時相同。 (elapsed = 0然後不正確;改變elapsed -= m * 60你算算m後;用相同小時)

此外,請注意您想要elapsed > 60,因爲分鐘應該去0..59,不0..60

1

Amadan是正確的,但更詳細地:

function go(){ 

    var start = new Date().getTime(), 
    elapsed = '0.0'; 

    window.setInterval(function() { 
     var time = new Date().getTime() - start; 

沒有必要爲的getTime(),所述subraction將迫使日轉換爲時間值。

 elapsed = Math.floor(time/100)/10; 

     if (Math.round(elapsed) == elapsed) { 
      elapsed += '.0'; 
     } 

的意圖似乎是經過轉換成秒到小數點後一位,所以上述所有可以被替換爲:

 elapsed = ((new Date() - start)/1000).toFixed(1); 

 if (elapsed >= 60) { 

你需要測試,如果經過增加了一分鐘,所以:

 if ((elapsed/60 | 0) > m) { 

  elapsed = 0; 
      m++; 
     } 

注意,你現在必須減量由代表的分鐘數過去。最簡單的方法是使用mod運算符和重新應用場所固定號碼:

elapsed = (elapsed % 60).toFixed(1); 

這相當於

  elapsed = (elapsed - m * 60).toFixed(1); 

 if (m >= 60) { 
      m = 0; 
      h++; 
     } 

     var totals = h + ":" + m + ":" + elapsed; 

你可能想,如果單數字的前導零PADD的numebers,所以:

 function z(n){return (n<10? '0' : '') + n;} 

     var totals = z(h) + ":" + z(m) + ":" + z(elapsed); 

或類似的東西。

 document.getElementById('output').innerHTML = totals; 
    }, 100); 
} 

功能的簡化版本是:

function go2(){ 

    var start = new Date().getTime(), 
    elapsed = '0.0'; 

    window.setInterval(function() { 
     function z(n){return (n<10? '0' : '') + n;} 

     elapsed = ((new Date() - start)/1000).toFixed(1); 
     m = (elapsed/60) % 60 | 0; 
     h = elapsed/3600 | 0; 

     var totals = z(h) + ":" + z(m) + ":" + z((elapsed % 60).toFixed(1)); 
     document.getElementById('output2').innerHTML = totals; 
    }, 100); 
} 
+0

非常感謝你羅布,我不明白其他答案,這完美的工作! –