0

我正在尝试为日期/时间创建一个简单的倒数计时器。

我目前只有以下几天可以运行运行良好的脚本:

<div id="countdown">

today = new Date();
BigDay = new Date("March 29, 2013");
msPerDay = 24 * 60 * 60 * 1000 ;
timeLeft = (BigDay.getTime() - today.getTime());
e_daysLeft = timeLeft / msPerDay;
daysLeft = Math.floor(e_daysLeft);
document.write(daysLeft + " days to go!");

</div>

我现在正在尝试创建一个完整的倒数计时器(带有小时、分钟和秒)并创建了以下脚本。html 没有显示在页面上。

var today = new Date();
var BigDay = new Date("29 03 2013, 14:30:00");
var msPerDay = 24 * 60 * 60 * 1000 ;
var timeLeft = (BigDay.getTime() - today.getTime());
var e_daysLeft = timeLeft / msPerDay;
var daysLeft = Math.floor(e_daysLeft);
var e_hrsLeft = (e_daysLeft - daysLeft)*24;
var hrsLeft = Math.floor(e_hrsLeft);
var e_minsLeft = (e_hrsLeft - hrsLeft)*60;
var minsLeft = Math.floor(e_minsLeft);
var e_secsLeft = (e_minsLeft - minsLeft)*1000;
var secsLeft = Math.floor(e_secsLeft);
var timeString = daysLeft + " : " + hrsLeft + " : " + minsLeft + " : " + secsLeft;

$('document').ready(function(){

window.setInterval(function(){
$('#countdown').html(timeString);
}, 1000);

});

我不确定问题可能是什么。第一个脚本包含在 html 中,第二个是外部 js 文件。

编辑:现在显示 html,但是所有值都显示为 NaN。

4

3 回答 3

12

除了提到的语法错误之外,还有逻辑错误,您需要计算超时函数内的剩余时间字符串,否则这些值仅在页面加载时计算。

$(function(){
    var BigDay = new Date("29 Mar 2013, 14:30:00");
    var msPerDay = 24 * 60 * 60 * 1000 ;


    window.setInterval(function(){
        var today = new Date();
        var timeLeft = (BigDay.getTime() - today.getTime());

        var e_daysLeft = timeLeft / msPerDay;
        var daysLeft = Math.floor(e_daysLeft);

        var e_hrsLeft = (e_daysLeft - daysLeft)*24;
        var hrsLeft = Math.floor(e_hrsLeft);

        var e_minsLeft = (e_hrsLeft - hrsLeft)*60;
        var minsLeft = Math.floor(e_minsLeft);

        var e_secsLeft = (e_minsLeft - minsLeft)*60;
        var secsLeft = Math.floor(e_secsLeft);


        var timeString = daysLeft + " : " + hrsLeft + " : " + minsLeft + " : " + secsLeft;
        $('#countdown').html(timeString);
    }, 1000);
})

演示:小提琴

于 2013-03-14T14:59:21.863 回答
0

你在这里有一个错误:var minsLeft = Math.floor((e_minsLeft);

第一个括号没有关闭,应该是var minsLeft = Math.floor(e_minsLeft);

于 2013-03-14T14:53:25.187 回答
0

因为您没有每秒运行 timeString 计算,所以 #countdown div 中的文本永远不会改变

于 2013-03-14T14:53:57.633 回答