2015-11-01 153 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