编辑:你已经编辑你的问题。您需要的时候填充,下面的方法会比你用的是什么速度更快,但要回答你的问题有关setInterval
:
首先,定义函数来运行你的计时器和减少每次被称为时间:
var timeLeft; // this is the time left
var elem; // DOM element where your timer text goes
var interval = null; // the interval pointer will be stored in this variable
function tick() {
timeLeft = Math.round(timeLeft/1000) * 1000;
const timer = new Date(timeLeft);
var time = timer.getUTCMinutes() + ':' + timer.getUTCSeconds();
elem.innerHTML = time;
timeLeft -= 1000; // decrement one second
if (timeLeft < 0) {
clearInterval(interval);
}
}
interval = setInterval(tick, 1000);
OG答:
不,我不相信有显示时间差的内置方式。
比方说,你有两个日期对象:
var start = Date.now();
var end = Date.now() + 15 * 60 * 1000; // 15 minutes
然后你就可以减去两个Date对象得到了一些他们之间的毫秒:
var diff = (end - start)/1000; // difference in seconds
要获得分钟数,你拿diff
,并除以60和结果:
var minutes = Math.floor(diff/60);
要获取的秒数,你拿模得到的余分钟后除去:
var seconds = diff % 60;
但是你要这两个被补零,所以要做到这一点,你转换为字符串,并检查是否他们是两个字符长。如果不是,你预先设置一个零:
// assumes num is a whole number
function pad2Digits(num) {
var str = num.toString();
if (str.length === 1) {
str = '0' + str;
}
return str;
}
var time = pad2Digits(minutes) + ':' + pad2Digits(seconds);
现在你有时间在几分钟和几秒钟。
我没有完全理解你,但你应该看看[moment.js](http://momentjs.com/docs)一个非常强大的JS库来处理日期和时间。 对于你所描述的你需要看看他们的文档中的“显示”部分 – ChicoDelaBarrio
@RaybanM你能看到我更新的问题吗?我坚持使用setInterval来调用我的方法,每隔1秒做一次。谢谢,我会检查出moment.js! – user1354934
我懒得写出答案,但前段时间我在一个自己的项目中“解决”了这个问题。相关代码是https://github.com/jwronline/dashboard/blob/gh-pages/src/js/main.js#L238-L292 –