2012-04-11 119 views
1

我正在尝试创建一个以年,月,日,小时,分钟,秒和毫秒为单位倒计时的计时器。我已经在网上找到了一些指南,但它们有点不易理解,或者毫秒级。任何人都可以帮助我在这个星期五的13:30做这样的事情。以毫秒为单位创建倒计时器

,以便它可以读取0Y0米2D 2H11米50ms的

和倒计时毫秒。我会显示代码来证明我实际上已经尝试过自己做这件事,但它都失败了,所以我很尴尬。

我也读this article,这让我不信任JavaScript的定时器一点。这是真的,他们成为so out of sync

感谢您的帮助!

+0

http://stackoverflow.com/questions/8067488/how-to-show-milliseconds-in -count-down-timer-javascript – Ghokun 2012-04-11 19:29:06

+0

是的,这是事实,他们变得不同步。作为一名系统管理员,我知道计算机时钟可以在短短几周内完成(10秒或20秒)。几个月后,他们会在几分钟内得到解脱。定期同步到标准时间服务器很重要。因此,制作基于JavaScript的计数将取决于计算机时钟的准确性。 – 2012-04-11 19:45:36

+0

既然你想在很多天,甚至是几周或几个月的时间内倒数,你想在哪里运行这个程序?在Web服务器上?在你的台式电脑上?在手机上? – 2012-04-11 19:48:32

回答

6

取决于你如何实现它。

如果您只读了一次,并依赖于setInterval或/和setTimeout来获得准确性,那么是的..他们可能会失去同步。

如果你总是得到当前在计算中使用的时间,那么它会像系统其他部分不同步一样意味着它跟随计算机的时钟。

改变我的答案在JavaScript/jQuery Countdown添加你

var end = new Date('13 Apr 2012 13:30:00'); 

var _second = 1000; 
var _minute = _second * 60; 
var _hour = _minute * 60; 
var _day = _hour *24; 
var timer; 

function showRemaining() 
{ 
    var now = new Date(); 
    var distance = end - now; 
    if (distance < 0) { 
     // handle expiry here.. 
     clearInterval(timer); // stop the timer from continuing .. 
     //alert('Expired'); // alert a message that the timer has expired.. 
    } 
    var days = Math.floor(distance/_day); 
    var hours = Math.floor((distance % _day)/_hour); 
    var minutes = Math.floor((distance % _hour)/_minute); 
    var seconds = Math.floor((distance % _minute)/_second); 
    var milliseconds = distance % _second; 

    var countdownElement = document.getElementById('timer'); 
    countdownElement.innerHTML = days + 'd ' + 
           hours + 'h ' + 
           minutes + 'm ' + 
           seconds + 's ' + 
           milliseconds + 'ms'; 
} 

timer = setInterval(showRemaining, 10); 

毫秒但由于需要更复杂的计算,以28-31因子天月和闰年它不处理的月份和年份..

演示在http://jsfiddle.net/TaHtz/2/

+0

与jeffery_the_wind的解决方案有何不同? – Straseus 2012-04-11 20:07:32

+1

@Straseus,它是不是很..但他之前,我回答我写的代码;) – 2012-04-11 21:42:41

+0

和它的伟大工程!谢谢! – 1252748 2012-04-11 22:58:26

1

试试这个js小提琴:http://jsfiddle.net/QH6X8/185/

设置结束DAT e在JavaScript的第一行中定义的变量end

如果你不想更新每隔1毫秒,那么这里是一个更新的jsfiddle每60:http://jsfiddle.net/QH6X8/187/

+0

虽然看起来很甜,但我不会推荐使用它。它将我的CPU使用率提高到100%。 – Straseus 2012-04-11 19:58:13

+0

很酷,让我检查我的...我的CPU仍然很低... 10%或更少 – 2012-04-11 19:58:59

+0

我的意思是这样的计时器仍然是一个超轻量级的应用程序。 – 2012-04-11 19:59:27