Search code examples
javascriptdatetimecountdowncountdowntimer

Multiple JavaScript countdown dates?


So I currently have one date, but I want multiple and for them to have unique id's.

I can currently use <div id="countdown"></div> to put it in my html, but I want to do something like id="countdown1", id="countdown2", id="countdown3", etc.

To explain more in depth i'm trying to have several dates like this with unique id's for each one so I can put each individual one in the html.

var end = new Date(Date.UTC(2015, 10, 10));
var end = new Date(Date.UTC(2015, 10, 11));
var end = new Date(Date.UTC(2015, 10, 12));
var end = new Date(Date.UTC(2015, 10, 13));

This is my current script:

var end = new Date(Date.UTC(2015, 10, 10, 5));

var _second = 1000;
var _minute = _second * 60;
var _hour = _minute * 60;
var _day = _hour * 24;
var timer;

function showRemaining() {
    var now = new Date();
    var distance = end - now;
    if (distance < 0) {

        clearInterval(timer);
        document.getElementById('countdown').innerHTML = 'EXPIRED!';

        return;
    }
    var days = Math.floor(distance / _day);
    var hours = Math.floor((distance % _day) / _hour);
    var minutes = Math.floor((distance % _hour) / _minute);
    var seconds = Math.floor((distance % _minute) / _second);

    document.getElementById('countdown').innerHTML = days + ' Day | ';
    document.getElementById('countdown').innerHTML += hours + ' Hours | ';
    document.getElementById('countdown').innerHTML += minutes + ' Minutes | ';
    document.getElementById('countdown').innerHTML += seconds + ' Seconds ';
}

timer = setInterval(showRemaining, 1000);

I tried a lot of different things and searched many times for a solution but have found nothing. Any help on this would be very appreciated.


Solution

  • Use object, it is a cleaner solution.

    function Timer(holder) {
    
            var controller = {
                holder: holder,
                end: null,
                intervalID:0,
                display: function () {
                    var _second = 1000;
                    var _minute = _second * 60;
                    var _hour = _minute * 60;
                    var _day = _hour * 24;
    
                    var msg = "";
    
                    var now = new Date();
    
                    var distance = controller.end - now;
                    if (distance < 0) {
    
                        clearInterval(controller.intervalID);
                        controller.holder.innerHTML = 'EXPIRED!';
    
                        return;
                    }
    
                    var days = Math.floor(distance / _day);
                    var hours = Math.floor((distance % _day) / _hour);
                    var minutes = Math.floor((distance % _hour) / _minute);
                    var seconds = Math.floor((distance % _minute) / _second);
                    controller.holder.innerHTML = days + ' Day | ' + hours + ' Hours | ' + minutes + ' Minutes | ' + seconds + ' Seconds ';
    
                }
            }
    
            this.countDown = function (end) {
                controller.end = end;
                controller.intervalID = setInterval(controller.display, 1000);
            }
        }
    

    Working sample at https://jsfiddle.net/mLr571tj/

    EDIT: Make sure you use the same date time format on initialization and in display function.