2013-03-26 4 views
0

У меня есть этот обратный отсчет javascript, который покажет секунды. Мне нужно знать, как я могу показать дни в счетчике вместо второго.javascript count down to show days?

i.e. 1 день, 2 часа осталось.

это код:

<script type="text/javascript"> 
var MAX_COUNTER = 1000; 
var counter = null; 
var counter_interval = null; 

function setCookie(name,value,days) { 
    var expires; 
    if (days) { 
     var date = new Date(); 
     date.setTime(date.getTime()+(days*24*60*60*1000)); 
     expires = "; expires="+date.toGMTString(); 
    } 
    else { 
     expires = ""; 
    } 
    document.cookie = name+"="+value+expires+"; path=/"; 
} 

function getCookie(name) { 
    var nameEQ = name + "="; 
    var ca = document.cookie.split(';'); 
    for(var i=0;i < ca.length;i++) { 
     var c = ca[i]; 
     while (c.charAt(0) == ' ') { 
      c = c.substring(1,c.length); 
     } 
     if (c.indexOf(nameEQ) === 0) { 
      return c.substring(nameEQ.length,c.length); 
     } 
    } 
    return null; 
} 

function deleteCookie(name) { 
    setCookie(name,"",-1); 
} 

function resetCounter() { 
    counter = MAX_COUNTER; 
} 

function stopCounter() { 
    window.clearInterval(counter_interval); 
    deleteCookie('counter'); 
} 

function updateCounter() { 
    var msg = ''; 
    if (counter > 0) { 
     counter -= 1; 
     msg = counter; 
     setCookie('counter', counter, 1); 
    } 
    else { 
     counter = MAX_COUNTER; 

    } 
    var el = document.getElementById('counter'); 
    if (el) { 
     el.innerHTML = msg; 
    } 
} 

function startCounter() { 
    stopCounter(); 
    counter_interval = window.setInterval(updateCounter, 1000); 
} 

function init() { 
    counter = getCookie('counter'); 
    if (!counter) { 
     resetCounter(); 
    } 
    startCounter(); 
} 

init(); 
</script> 

на данный момент это только показывает секунды, и он перезагрузится, как только он попадает 0.

+0

вам нужно преобразовать секунды в часы, минуты и дни. попробуйте http://jsfiddle.net/h2DEr/ – vdua

+0

@vdua, Спасибо. Это именно то, что я искал. –

+0

, так как это сработало, я отвечу на вопрос, чтобы вы могли закрыть этот вопрос. – vdua

ответ

2
http://jsfiddle.net/h2DEr/1/ 

function updateCounter() { 
    var msg = ''; 
    if (counter > 0) { 
     counter -= 1; 
     msg = convertSecondsToDays(counter); 
     setCookie('counter', counter, 1); 
    } 
    else { 
     counter = MAX_COUNTER; 
    } 
    var el = document.getElementById('counter'); 
    if (el) { 
     el.innerHTML = msg; 
    } 
} 

Вот функция, которая преобразует секунды в дни

function convertSecondsToDays(sec) { 
    var days, hours,rem,mins,secs; 
    days = parseInt(sec/(24*3600)); 
    rem = sec - days*3600 
    hours = parseInt(rem/3600); 
    rem = rem - hours*3600; 
    mins = parseInt(rem/60); 
    secs = rem - mins*60; 
    return days +" days " + hours +" hours "+mins + " mins "+ secs + " seconds"; 
} 

обновление: после @ sanya_zol Ответим и комментарии от Дэвида Смита

так setInterval не должен работать каждую секунду вам нужно немного изменить свою стратегию. Я также модифицировал скрипку для этого

  1. Установите MAX_COUNTER на значение, когда вы хотите, чтобы оно истекло.
  2. вместо уменьшения счетчика на -1, проверить текущее время, вычесть его из даты истечения срока действия и отобразить его.

    EXPIRY_SECONDS = 24*60*60; 
        MAX_COUNTER = parseInt(new Date().getTime()/(1000)) + EXPIRY_SECONDS; 
    
        function updateCounter() { 
        var msg = '',curTime = parseInt(new Date().getTime()/1000); 
    
        if (curTime < MAX_COUNTER) { 
         msg = convertSecondsToDays(MAX_COUNTER- curTime); 
         setCookie('counter', MAX_COUNTER- curTime, 1); 
        } 
        else { 
         MAX_COUNTER = parseInt(new Date().getTime()/1000) + EXPIRY_SECONDS; 
        } 
    
        var el = document.getElementById('counter'); 
        if (el) { 
         el.innerHTML = msg 
        } 
        } 
    
+0

Хотя я выбрал это как ответ, но это все еще не работает правильно. счетчик вниз сбросится на обновление страницы, чего не было в моем собственном коде, и этого не должно произойти. –

+0

Я никогда не думал, что это был прецедент. Изменили скрипку http://jsfiddle.net/h2DEr/5/ – vdua

+0

Большое спасибо. и это будет сброшено, как только оно достигнет 0? –

0
counter_interval = window.setInterval(updateCounter, 1000); 

1000 является значение в миллисекундах так, сколько миллисекунд есть ли в день?

counter_interval = window.setInterval(updateCounter, 1000*60*60*24); 
+0

Благодарим вас за ответ. Я абсолютный noob в javascript, и я не совсем уверен, как использовать код, который вы мне дали. любой шанс вы могли бы объяснить это немного, пожалуйста? –

+0

Я заменил код кодом и когда я его заменил, ничего не происходит. счетчик перестает работать .... –

+0

В это время стоит один день, поэтому вам нужно подождать до завтра, чтобы узнать, работает оно или нет. – HMR

0

дополнение к ответу vdua в:

Ваш код действительно плохо написана.

Он использует setInterval, который счетчик не является точным (к тому же, это очень, очень плохой точность) - так второй вашего счетчика будет равен 1,05-1,2 реальных секунд (разница между реальным временем и счетчиком будет накапливаться).

Вы должны проверить системное время (через (новая дата) .getTime()) каждый раз с более низкими интервалами (например, 100 мс), чтобы получить точный счетчик.