倒计时从未达到0并给出负值

时间:2012-09-17 21:28:09

标签: javascript

我有一个倒计时脚本,但我有2个问题。 1.我的倒计时从未达到0并且停止,所以我得到一个连续的负数。 2.计数器只显示在chrome而不是firefox或Internet explorer。我如何解决这两个问题?

var sec, min, hr, day, timer, expireDate;

sec = 1000;
min = 60 * 1000;
hr = 60 * 60 * 1000;
day = 24 * 60 * 60 * 1000;
timer;
expireDate = new Date('Mon Sep 17 2012 14:26:00 GMT-0700');

timer = setInterval(function() {
    var currentDate, countdown, days, hours, minutes, seconds;
    currentDate = new Date();
    countdown = expireDate - currentDate;
    if (countdown === 0 ) {
        window.clearInterval(timer); 
        document.getElementById('countdown').innerHTML = 'EXPIRED!';
    }

    days = Math.floor(countdown / day);
    hours = Math.floor((countdown % day) / hr);
    minutes = Math.floor((countdown % hr) / min);
    seconds = Math.floor((countdown % min) / sec);
    console.log(countdown);
    document.getElementById('countdown').innerHTML = days + " " + hours + " " + minutes + " " + seconds;
}, 1000);​

3 个答案:

答案 0 :(得分:2)

在这两行中:

currentDate = new Date();
countdown = expireDate - currentDate;

你得到当前时间和预期时间之间的差异,精确到毫秒

如果它没有达到正确的值,它就会越过它。

===测试更改为<=

答案 1 :(得分:1)

正如其他人所说,您应该使用< 0

此外,一旦满足您的过期条件,您将立即覆盖EXPIRED!标签,因此您永远不会看到它。您需要将if后面的代码移到else中,或者只需在if内返回。

if (countdown <= 0 ) {
    window.clearInterval(timer); 
    document.getElementById('countdown').innerHTML = 'EXPIRED!';
} else {
    days = Math.floor(countdown / day);
    hours = Math.floor((countdown % day) / hr);
    minutes = Math.floor((countdown % hr) / min);
    seconds = Math.floor((countdown % min) / sec);
    console.log(countdown);
    document.getElementById('countdown').innerHTML = days + " " + hours + " " + minutes + " " + seconds;
}

最后,它在IE中不起作用的原因可能是console.log。如果您当时没有打开控制台,IE将失败。只需删除console.log行,这在IE中就可以了。

答案 2 :(得分:0)

您将时间与毫秒进行比较!你必须非常幸运地完成这项工作:

currentDate = new Date();
countdown = expireDate - currentDate;

尝试:

if (countdown < 0 ) {