2014-01-22 43 views
0

編輯:由於答案,一些問題得到解決,但它仍然無法正常工作。它現在在首頁加載時顯示正確的倒數計時,但一旦設置了cookie並重新加載頁面,它就會顯示錯誤的時間,並且每次重新加載都會重新啓動。我相應地更新了我的代碼。基於Cookie的倒計時器不起作用

我一直在尋找天的解決方案,沒有任何工作,因爲我需要它。我的目標非常簡單 - 我需要一個可以倒計時3天然後重複的計時器。實際上,對於每個人(服務器定義的時間)或本地(根據用戶第一次訪問的時間)它可以是相同的。我需要它不刷新頁面重新加載或一天結束。

所以我得出結論,我會需要cookies:當你第一次進入頁面時,定時器開始倒計時,直到從現在開始的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。

回答

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'}); 
}); 

我希望這能在別人有幫助未來,因爲它花了我很長時間才弄清楚,我沒有找到這個確切的倒計時任務的解決方案。並感謝那些指出我的一些錯誤的答案!

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); 

最後一點(也許)未定義的關鍵字周圍不需要引號。

+0

的確,我一直在更換部分代碼,並沒有注意到,謝謝!我要更改頂端文章中的代碼。但它仍然不起作用。 – user2816581

+0

變量的類型是'timerValue'。此外,我已更新我的回答 –

0

聲明

if (cookie === "undefined")

是一個問題。您無法將javascript undefined與字符串"undefined"進行比較。這就是爲什麼你的代碼沒有輸入if條件的原因。

要麼

​​

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

+0

謝謝,現在如果聲明有效!現在我注意到,只有在if語句中指定了cookie值後才返回cookie值,如下所示:'cookie = $ .cookie('offerTimer',timerValue,{expires:7,path:'/'});'.. 。我可以聲明'var cookie = $ .cookie('offerTimer');'globaly? – user2816581