我正在实现一个函数,以Angular格式当前时间倒计时 - 将来的现有时间。如果时间已过,则显示一条消息。计时器耗尽...... HH:MM:SS
目标是获得一个当前时间 - 结束时间的计时器。将其保存到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
请让我知道如何解决这个问题......
答案 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,因为它可以轻松处理差异和格式。