基于Cookie的倒计时器不起作用

时间:2014-01-22 04:49:09

标签: jquery cookies timer jquery-cookie jquery-countdown

编辑:感谢答案,一些问题已经解决,但仍然无法正常工作。它现在显示第一页加载时的正确倒计时,但是一旦设置了cookie并重新加载页面,它就会显示错误的时间,每次重新加载时也会重新启动。我已相应更新了下面的代码。

我一直在寻找解决方案好几天,没有任何工作,因为我需要它。我的目标非常简单 - 我需要一个可以倒数3天然后重复的计时器。事实上,对于每个人(具有服务器定义的时间)或本地(取决于用户的首次访问时间),它可以是相同的。我需要它不刷新页面重新加载,也不要在一天结束时刷新。

所以我得出的结论是我需要cookie:当你第一次进入页面时,计时器开始倒计时,直到现在为止3天。如果您离开网站并在2天内到达,则将剩余1天。如果您在一周后离开并再次来,计时器将再次开始计算3天。

对于我使用plugin by Keith Wood的时间。对于Cookie,我使用plugin by Klaus Hartl。到目前为止,这是我的代码:

$(document).ready(function(){

    if (!$.cookie('offerTimer')){
        var now = new Date(); 
        timerValue = new Date(now.getFullYear(), now.getMonth(), now.getDate() + 3); 
        cookie = $.cookie('offerTimer', timerValue, { expires: 7, path: '/' });
    }else {
        cookie = $.cookie('offerTimer');
    }

    $('#until3d').countdown({until: cookie, format: 'HMS'});
    console.log('cookie is ' + cookie);
});

在第一页加载时(未设置cookie时)cookie返回:

offerTimer=Tue%20Jan%2007%202014%2000%3A00%3A00%20GMT%2B0800%20(%D0%9A%D1%80%D0%B0%D1%81%D0%BD%D0%BE%D1%8F%D1%80%D1%81%D0%BA%D0%BE%D0%B5%20%D0%B2%D1%80%D0%B5%D0%BC%D1%8F%20(%D0%B7%D0%B8%D0%BC%D0%B0)); expires=Thu, 30 Jan 2014 09:09:37 GMT; path=/

在第二次及以下访问中,Cookie返回:

Tue Jan 07 2014 00:00:00 GMT+0800 (Красноярское время (зима)) 

那里有西里尔符号,因为我来自俄罗斯。我几乎可以肯定,我可能需要的是让cookie以相应的格式返回日期,以便倒计时功能正常工作。但我不知道如何用第一个输出显示正确的时间...另外我尝试将日期的格式设置为倒计时插件的格式(为此我使用其他插件),结果是相同或根本不起作用。

PS:我知道绕过这样的计时器很容易,但在这种情况下不会被视为一个问题。

编辑:感谢user2310289,稍微改变了一下代码。

3 个答案:

答案 0 :(得分:1)

我终于成功了。解决方案非常简单。

我使用插件使其更容易(当然,使用jQuery):

<script type="text/javascript" src="jquery.countdown.js"></script>
<script type="text/javascript" src="jquery.cookie.js"></script>
<script type="text/javascript" src="date.format.js"></script>

这是我的代码:

$(document).ready(function(){

    if (!$.cookie('offerTimer')){
        var now = new Date(); 
        timer = new Date(now.getFullYear(), now.getMonth(), now.getDate() + 3);
        $.cookie('offerTimer', timer.format("yyyy, mm, dd"), { expires: 7, path: '/' });
    }

    var cookie = $.cookie('offerTimer');

    $('#until3d').countdown({until: new Date(cookie), format: 'HMS'});
});

我希望这可能对将来的某些人有所帮助,因为我花了很长时间才弄清楚,而且我找不到这个确切的倒计时任务的解决方案。谢谢你找到我的一些错误的答案!

答案 1 :(得分:0)

开始now未定义

var threeDays = new Date();
now.getFullYear(), now.getMonth(), now.getDay() + 3

可以使用

中的threeDays变量
threeDays.getFullYear(), threeDays.getMonth(), threeDays.getDay() + 3

我想你也想做

var timerValue = new Date(now.getFullYear(), now.getMonth(), now.getDay() + 3);

最后(也许)未定义关键字周围不需要引号。

答案 2 :(得分:0)

声明

if (cookie === "undefined")

是个问题。您无法将javascript undefined与字符串"undefined"进行比较。这就是您的代码未进入if条件的原因。

要么

if (!cookie)

if (('' + cookie) === "undefined")

相关问题