将时间定义为小时

时间:2014-02-02 22:50:02

标签: javascript countdown

是否有可能将我的倒计时时间定义为现在几个小时“2014年12月25日00:01:00”但是我可能会有这样的“14:00”并且它每天都会运行。这是我的代码。

<!DOCTYPE html>
    <html>
    <head>
    <script type="text/javascript">
    function cdtd() {
        var xmas = new Date("December 25, 2014 00:01:00");
        var now = new Date();
        var timeDiff = xmas.getTime() - now.getTime();
        if (timeDiff <= 0) {
            clearTimeout(timer);
            document.write("Christmas is here!");

        }
        var seconds = Math.floor(timeDiff / 1000);
        var minutes = Math.floor(seconds / 60);
        var hours = Math.floor(minutes / 60);
        var days = Math.floor(hours / 24);
        hours %= 24;
        minutes %= 60;
        seconds %= 60;
        document.getElementById("daysBox").innerHTML = days;
        document.getElementById("hoursBox").innerHTML = hours;
        document.getElementById("minsBox").innerHTML = minutes;
        document.getElementById("secsBox").innerHTML = seconds;
        var timer = setTimeout('cdtd()',1000);
    }
    </script>
    </head>
    <body>
    Days Remaining:
    <div id="daysBox"></div>
    Hours Remaining:
    <div id="hoursBox"></div>
    Minutes Remaining:
    <div id="minsBox"></div>
    Seconds Remaining:
    <div id="secsBox"></div>
    <script type="text/javascript">cdtd();</script>
    </body>
    </html>

修改

倒计时工作正常,但要使其工作,我必须定义时间 (毫米:DD:YY:HH:MM:SS)。我的问题是我可以定义时间吗 这个(hh:mm:ss)因为日期并不重要,只有那个 问题是时间(hh:mm:ss)以及结束倒计时的时间 重新启动并再次开始计数到示例14:25:00(hh:mm:ss)。

2 个答案:

答案 0 :(得分:0)

不要将解析日期字符串留给日期构造函数。 ES5定义了支持的字符串格式,但并非所有浏览器都支持它。在ES5之前,解析日期字符串完全取决于实现。在这种情况下,您确切地知道要设置的日期和时间,因此请使用数字参数:

>    var xmas = new Date(2014, 11, 25);

将根据系统设置在本地时区为2014-12-25T00:00:00创建Date对象。

>    if (timeDiff <= 0) {
>        clearTimeout(timer);

无需清除任何超时,只是不要再次调用 setTimeout

>        document.write("Christmas is here!");

如果在加载事件后调用,则将清除整个文档。可能不是你想要为午夜观看计时器的人做的事情,然后丢失了整个页面。 : - )

>    var timer = setTimeout('cdtd()',1000);

每1秒调用一次setTimeout意味着计时器将逐渐漂移,偶尔会出现跳过一秒钟。如果与系统时钟相比,它也不会“打勾”。相反,请根据当前毫秒设置延迟,例如

>    var timer = setTimeout('cdtd()', (1020 - now%1000));

所以接下来的整整一秒后它将在20ms左右运行。如果时间已过,请不要调用 setTimeout

如果您只是在寻找格式化时间,例如hh:mm:ss,那么您需要一个小函数来填充单个数字,然后连接这些值,例如

function pad(n){return (n<10? '0' ; '') + n;}

然后:

document.getElementById("hoursBox").innerHTML = pad(hours) + ':' + pad(minutes) + ':' +
                                                pad(seconds);

您可以从那里找出如何格式化日期部分。请注意,月份:日期:年份格式对绝大多数网络用户来说非常混乱。最好使用像year-month-day hh:mm:ss

这样的ISO 8601格式

答案 1 :(得分:0)

这个小提琴的一些工作结果:http://jsfiddle.net/dehisok/6Wu9a/1/

var now = new Date();
var xmas = new Date(now.getFullYear(),now.getMonth(),now.getDate(),23,1,0);

但是有一个错误:如果针时间过去 - 它会崩溃:(不幸的是,没有时间修复。

我已将document.write更改为jquery,因为jsfiddle不支持d.write。

我希望,这就是你所需要的。

祝你好运!