2016-04-01 25 views
0

Biraz kafam karışık. Ayın 1 gününü almam gerek, 3 gün için saymaya başlamalı. Süre sona erdiğinde yeniden başlatıldı. Her 3 günde bir geri sayım sayacı

var today = new Date(), 
 
    end = new Date(today.getFullYear(), today.getMonth(), today.getDate() + 3); 
 

 
var timer = setInterval(function() { 
 
    var differenceTime, dd, hh, mm, ss, str; 
 

 
    if ((new Date().getDate() == end.getDate()) || (new Date().getDate() == 1)) { 
 
    end = new 
 
    } else { 
 
    differenceTime = end - new Date(); 
 

 
    dd = parseInt(differenceTime/(1000 * 60 * 60 * 24)); 
 
    hh = parseInt(differenceTime/(60 * 60 * 1000)) % 24; 
 
    mm = parseInt(differenceTime/(1000 * 60)) % 60; 
 
    ss = parseInt(differenceTime/1000) % 60; 
 

 
    document.querySelector('.days').innerHTML = format(dd); 
 
    document.querySelector('.hours').innerHTML = format(hh); 
 
    document.querySelector('.minutes').innerHTML = format(mm); 
 
    document.querySelector('.seconds').innerHTML = format(ss); 
 
    } 
 
}, 1000); 
 

 
function format(num) { 
 
    return (9 < num) ? num : "0" + num; 
 
};
<div class="cowntdown"> 
 
    <span class="days"></span> 
 
    <span class="hours"></span> 
 
    <span class="minutes"></span> 
 
    <span class="seconds"></span> 
 
</div>
<div class="cowntdown"> 
 
    <span class="days"></span> 
 
    <span class="hours"></span> 
 
    <span class="minutes"></span> 
 
    <span class="seconds"></span> 
 
</div>

Yardım

sağ koşulu olun.

+0

Sorunuz çok mantıklı değil tercih ederseniz. Neye ulaşmaya çalıştığını açıklayabilir misin? Ayın başından itibaren 3 günlük geri sayım mı arıyorsunuz? – rpbaltazar

+0

@rpbaltazar, yes – Aleksandr

+0

@rpbaltazar, yani 3 gün geçti, zamanlayıcının tekrar başlatılması gerekiyor. – Aleksandr

cevap

1

Kodunuzun olabildiğince çoğunu yeniden denedim. Sorunu doğru anladıysam, bu hile yapmalı. moment.js'u kullanırsanız, özellikle de metni biçimlendirme ve tarihler arasındaki farkı hesaplama konusunda bazı temiz kodlar alabilirsiniz.

Lütfen, tarihlerin saniyelerle karşılaştırıldığı için çekinin tamamen kesin olmadığını unutmayın.

var numberOfDays = 3; 
 
var today = new Date(); 
 
var start = getNextStartDate(today); 
 
var end = getNextEndDate(today); 
 

 
var timer = setInterval(function() { 
 
    var differenceTime, dd, hh, mm, ss, str; 
 
    var now = new Date(); 
 
    if (now >= end) { 
 
    start = getNextStartDate(now); 
 
    end = getNextEndDate(now); 
 
    } else { 
 
    differenceTime = end - now; 
 

 
    dd = parseInt(differenceTime/(1000 * 60 * 60 * 24)); 
 
    hh = parseInt(differenceTime/(60 * 60 * 1000)) % 24; 
 
    mm = parseInt(differenceTime/(1000 * 60)) % 60; 
 
    ss = parseInt(differenceTime/1000) % 60; 
 

 
    document.querySelector('.days').innerHTML = format(dd); 
 
    document.querySelector('.hours').innerHTML = format(hh); 
 
    document.querySelector('.minutes').innerHTML = format(mm); 
 
    document.querySelector('.seconds').innerHTML = format(ss); 
 
    } 
 
}, 1000); 
 

 
function getNextEndDate(fromDate) { 
 
    return new Date(fromDate.getFullYear(), fromDate.getMonth(), fromDate.getDate() + numberOfDays); 
 
} 
 

 
function getNextStartDate(currentDate) { 
 
    var currentDay = currentDate.getDate(); 
 
    var index = Math.ceil(currentDay/3); 
 
    var nextStartDay = 1 + numberOfDays * index 
 
    return new Date(currentDate.getFullYear(), currentDate.getMonth(), nextStartDay); 
 
} 
 

 
function format(num) { 
 
    return (9 < num) ? num : "0" + num; 
 
};
<div class="cowntdown"> 
 
    <span class="days"></span> 
 
    <span class="hours"></span> 
 
    <span class="minutes"></span> 
 
    <span class="seconds"></span> 
 
</div>

da vardır bir jsfiddle Eğer

+0

numaranızda olması gerektiği için çok teşekkür ederim, kardeşim! Nice – Aleksandr

+1

Yardım etmek için mutluyum ve Stack Overflow'a hoş geldiniz. Bu cevap sorununuzu çözdüyse, lütfen kabul edildi olarak işaretleyin. – rpbaltazar

+0

Tekrar teşekkürler, kardeşim! – Aleksandr