2012-12-12 71 views
-1

我有jQuery的倒計時這是我從here了,並試圖用cookie來修改,以獲得持久的結果如下: 編輯JQuery的持續倒計時與餅乾

<script type="text/javascript"> 
    (function($) { 
    function countdown(el, options) { 
    var calc = function (target, current) { 
     var o = {}; 

     var datetarget = getCookie('Target'); 
     if(!datetarget) { 
      clearInterval(cd.id); 
      var datetarget = target.getTime()/1000; 
     } 
     if(datetarget <= 0) { return true; } 
     deleteCookie('Target'); 
     o.seconds = datetarget; 
     o.seconds %= 86400; 
     o.hours = Math.floor(o.seconds/3600); 
     o.seconds -= o.hours * (3600); 
     o.minutes = Math.floor(o.seconds/60); 
     o.seconds -= o.minutes * (60); 
     o.seconds %= 60; 
     datetarget -= 1; 
     setCookie('Target',datetarget,1); 
     return o; 
    }; 

這多少工作,但我仍然有浮動,而不是「秒」部分的整數和「小時」的錯誤結果。有任何想法嗎?

+1

爲什麼選擇cookies?你可以使用'localStorage'對象。 –

+0

@ŠimeVidas:我如何用localStorage做到這一點?或者也許,我錯了把setCookie和getCookie? –

+0

設置:'localStorage.setItem('item-name','item-value');';得到:'localStorage.getItem('item-name');' –

回答

2

我仍然有浮動,而不是整數的「秒」部分

你永遠不四捨五入它。當你從getTime得到了毫秒是一個整數,則1000將轉換爲秒後得到了與3位小數的浮動。

此外,EcmaScript Modulus operator不彩車上工作,而不是截斷數和運算結果爲整數。引用規範:

在C和C++中,餘數運算符只接受整型操作數; ECMAScript中的 ,它也接受浮點操作數。

作爲計算由 %運算浮點餘數操作的結果是不一樣的由 IEEE 754定義的「餘數」操作的IEEE 754「餘數」操作從舍入計算剩餘 除法,而不是一個捨去除法,所以其 行爲不是類似於通常的整數餘數 運算符。代替ECMAScript語言浮點限定% 操作以類似於在Java整數 餘運算符的方式工作;這可以與f庫的C庫函數 進行比較。

凡既不是無窮大,也不是零,也不NaN被涉及[...],從被除數n中 浮點餘數r和除數d是由數學關係R =正定義 - (d * q)其中q是隻有在n/d爲負時爲負的 整數,只有當 n/d爲正時才爲負,且其幅度儘可能大,而不超過n和d的真實數學商數的幅度, d。 使用 IEEE 754圓到最近模式計算並四捨五入爲最接近的可表示值。

半句也解釋了爲什麼我們可能會得到來自小舍入誤差一些其他的小數在floating point arithmetic

您可以省略相當於線

o.seconds -= o.minutes * (60); 
    o.seconds %= 60; 

之一,加上 「小時」

我看不到的

o.seconds = Math.round(o.seconds); 
    o.seconds = Math.floor(o.seconds); 

錯誤的結果一個。可能有可能您確實希望價值根據您的時區行事?getTime返回自紀元以來的毫秒數,它在UTC

+0

謝謝。我發現我的錯誤。謝謝 ... –