2012-04-11 122 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