2015-11-01 144 views
1

格式我有這樣的代碼:秒錶/倒計時(00:00:00)用javascript

function startStopwatch() { 
     vm.lastTickTime = new Date(); 

     $interval.cancel(vm.timerPromise); 
     vm.timerPromise = $interval(function() { 
      var tickTime = new Date(); 
      var dateDiff = vm.lastTickTime.getTime() - tickTime.getTime(); 
      var secondsDiff = Math.abs(dateDiff/1000); 
      vm.secondsElapsed += Math.round(secondsDiff); 
      vm.formattedSecondsElapsed = moment.duration(secondsElapsed, "seconds").format("HH:mm:ss"); 
      vm.lastTickTime = tickTime; 
     }, 1000); 
    } 

它蜱秒(INT),因爲「播放」按鈕被擊中秒錶。

但格式0102 ....高達60,然後01:0101:02

我想格式化爲00:00:00,遞增INT。我找到了其他編程語言的答案,但不是JavaScript。任何幫助感謝!

+0

哇downvoter:這是與支持代碼一個深思熟慮的問題... – RJB

+0

你爲什麼不建立自己的轉換功能 - 它不應該太硬?不確定是否有用於此目的的開箱即用功能。每當我需要這樣的東西時,我都會在幾分鐘內建立起自己的想法......但是可能有一種方法可以隨時做,讓我們等待答案。 – Shomz

+0

是的,我希望有人知道他們頭頂的方便的答案。我很困惑downvote。如果需要,我會推出自己的功能併發布。 – RJB

回答

2

借款,該算法轉換成一個過濾器:

過濾

app.filter('time', function() { 
    function isInt(n){ 
     return Number(n) === n && n % 1 === 0; 
    } 
    return function(val) { 
     if (isInt(val)) 
      return new Date(null, null, null, null, null, val).toTimeString().replace(/.*(\d{2}:\d{2}:\d{2}).*/, "$1"); 

     return val; 
    } 
}); 

使用

app.controller('ctrl', function($scope) { 
    $scope.seconds = 25251; 
}); 

HTML

<div ng-controller="ctrl"> 
     {{ seconds | time }} 
</div> 

Demo Plunker

+0

感謝您認真對待問題。這很棒;我原本希望使用過濾器。 – RJB

1

我打算取消刪除,因爲我認爲這是最好的答案,我認爲它具有學術價值。

vm.durationElapsed = new Date(null, null, null, null, null, secondsElapsed).toTimeString().replace(/.*(\d{2}:\d{2}:\d{2}).*/, "$1"); 

答發現:https://stackoverflow.com/a/12612778/1507899由RJB提供的答案

+0

我認爲你應該關閉它,並在那裏提出最初的答案。 – Shomz

+0

這是根據答案的評論之一進行的修改。他的回答修改了日期;這種格式已過秒 - 對秒錶更有用。 – RJB

+0

啊,我明白了。很公平! – Shomz