0

我有一个倒计时脚本,但我有 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);​
4

3 回答 3

2

在这两行中:

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

您将当前时间和预期时间之间的差值精确到毫秒

如果它没有达到完全正确的值,它将直接超过它。

===将测试更改为<=

于 2012-09-17T21:30:57.087 回答
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 中就可以正常工作。

于 2012-09-17T21:35:08.417 回答
0

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

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

尝试:

if (countdown < 0 ) {
于 2012-09-17T21:32:12.127 回答