使用Cookie的JQuery持久倒计时

时间:2012-12-12 00:16:29

标签: javascript jquery

我从here获取了jquery倒计时,并尝试使用cookie修改以获得持久性结果,如下所示: 的被修改

   <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 个答案:

答案 0 :(得分:2)

  

我在“秒”部分

上仍然有浮动而不是整数

你永远不会把它弄圆。虽然从getTime获得的毫秒数是一个整数,但是在除以1000后得到一个带有3位小数的浮点数,以转换为秒数。

此外,EcmaScript Modulus operator对浮点数有效,而不是截断操作数并导致整数。引用规范:

  

在C和C ++中,余数运算符只接受整数操作数;   在ECMAScript中,它也接受浮点操作数。

     

由浮点数计算的浮点余数运算的结果   %运算符与定义的“余数”运算不同   IEEE 754. IEEE 754“余数”操作计算余数   来自一个舍入部门,而不是一个截断部门,所以它   行为与通常的整数余数不相似   运营商。而是ECMAScript语言在浮点上定义%   操作以类似于Java整数的方式运行   余数运算符;这可以与C库函数进行比较   FMOD。

     

无论是无限,也不是零,也不涉及NaN [...]   从被除数n和除数d得到的浮点余数r   由数学关系r = n - (d * q)定义,其中q是a   仅当n / d为负时才为负的整数,仅当为n时为正   n / d是正的,其大小尽可能大   超过n和d的真实数学商的大小。   计算r并使用舍入到最接近的可表示值   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