Angular中的倒数计时器使用$ Interval()

时间:2016-09-15 21:58:21

标签: angularjs timer intervals

我正在实现一个函数,以Angular格式当前时间倒计时 - 将来的现有时间。如果时间已过,则显示一条消息。计时器耗尽...... HH:MM:SS

  • 结束时间。让我们称之为 endTime ,例如: 9/15/2016 9:16:00 PM
  • 当前时间。我们生活的当前时刻。 让我们称之为 currentTime

目标是获得一个当前时间 - 结束时间的计时器。将其保存到Variable TotalHours。

然后计算NOW到总小时数的剩余时间。例如,TotalHours = 5.现在是9/14/2016 1:16:00 PM,然后是FinalCountDown = 6:16:00 PM。那是我想要运行的计时器......

以下是我的表现......

if (info.endTime) {

  var CurrentTime = new Date().toLocaleString('en-US');
  moment.locale(); // en

  var TotalHours = moment.utc(moment(info.diffTime, "DD/MM/YYYY HH:mm:ss").diff(moment(CurrentTime, "DD/MM/YYYY HH:mm:ss"))).format("HH:mm:ss");

  info.finalCountDown= TotalHours;

};

这里的问题如下:

案例1:

endTime = 9/15/2016 9:16:00 AM
currentTime = 9/15/2016 1:21:00 PM

TotalHours = 4:05:00

但是......如果它在接下来的两天之后......

案例2:

endTime = 9/17/2016 9:16:00 AM
currentTime = 9/15/2016 1:21:00 PM

TotalHours = 4:05:00

Total hours is still the same...

我需要它添加24小时+ 24小时+额外时间= 48 + 4:05:00 = 52:05:00

我也希望它显示为:52h:05m:00s

请让我知道如何解决这个问题......

1 个答案:

答案 0 :(得分:1)

一个快速而肮脏的解决方案是简单地将两个日期/时间对象之间的差异转换为毫秒,然后在毫秒上进行一些数学运算并按如下方式格式化输出:

var currentTime = new Date("9-15-2016 13:21:00");
var endTime = new Date("9-17-2016 09:16:00");

var ms = (endTime - currentTime); // ms of difference
var days = Math.round(ms/ 86400000);
var hrs = Math.round((ms% 86400000) / 3600000);
var mins = Math.round(((ms% 86400000) % 3600000) / 60000);

$scope.finalCountdown = (days + "d:" + hrs + " h:" + mins + "m left");

如果需要,您可以添加秒的计算,并且可以对数字进行一些格式化以使其具有前导零。

但是,这样做并不能解决诸如闰年和其他数据以及时间异常等问题。更好的建议是使用angular-moment利用Moment.js,因为它可以轻松处理差异和格式。