javascripthtmljquerystaticjquery-countdown

JS Countdown that can reset every week on a specific day and time


My webpage timenite.com/item-shop shows a countdown that resets every day at 5:30 AM IST, I want to make a similar page in the directory timenite.com/xx and set it to reset every week on Thursdays at 8:30 PM IST.

Below is the script of what is being used currently on the item-shop page, there were actually two script files but I have combined them into one, just in case.

Help would be appreciated, thank you.

(function ($) {
    $.fn.countdown = function (options, callback) {
        var settings = $.extend({
            date: null,
            offset: null,
            day: 'Day',
            days: 'Days',
            hour: 'Hour',
            hours: 'Hours',
            minute: 'Minute',
            minutes: 'Minutes',
            second: 'Second',
            seconds: 'Seconds'
        }, options);

        // Throw error if date is not set
        if (!settings.date) {
            $.error('Date is not defined.');
        }

        // Throw error if date is set incorectly
        if (!Date.parse(settings.date)) {
            $.error('Incorrect date format, it should look like this, 12/24/2012 12:00:00.');
        }

        // Save container
        var container = this;

        /**
         * Change client's local date to match offset timezone
         * @return {Object} Fixed Date object.
         */
        var currentDate = function () {
            // get client's current date
            var date = new Date();

            // turn date to utc
            var utc = date.getTime() + (date.getTimezoneOffset() * 60000);

            // set new Date object
            var new_date = new Date(utc + (3600000*settings.offset));

            return new_date;
        };

        /**
         * Main countdown function that calculates everything
         */
        function countdown () {
            var target_date = new Date(settings.date), // set target date
                current_date = currentDate(); // get fixed current date

            // difference of dates
            var difference = target_date - current_date;

            // if difference is negative than it's pass the target date
            if (difference < 0) {
                // stop timer
                clearInterval(interval);

                if (callback && typeof callback === 'function') callback();

                return;
            }

            // basic math variables
            var _second = 1000,
                _minute = _second * 60,
                _hour = _minute * 60,
                _day = _hour * 24;

            // calculate dates
            var days = Math.floor(difference / _day),
                hours = Math.floor((difference % _day) / _hour),
                minutes = Math.floor((difference % _hour) / _minute),
                seconds = Math.floor((difference % _minute) / _second);

            // based on the date change the refrence wording
            var text_days = (days === 1) ? settings.day : settings.days,
                text_hours = (hours === 1) ? settings.hour : settings.hours,
                text_minutes = (minutes === 1) ? settings.minute : settings.minutes,
                text_seconds = (seconds === 1) ? settings.second : settings.seconds;

                // fix dates so that it will show two digets
                days = (String(days).length >= 2) ? days : '0' + days;
                hours = (String(hours).length >= 2) ? hours : '0' + hours;
                minutes = (String(minutes).length >= 2) ? minutes : '0' + minutes;
                seconds = (String(seconds).length >= 2) ? seconds : '0' + seconds;

            // set to DOM
            container.find('.days').text(days);
            container.find('.hours').text(hours);
            container.find('.minutes').text(minutes);
            container.find('.seconds').text(seconds);

            container.find('.days_text').text(text_days);
            container.find('.hours_text').text(text_hours);
            container.find('.minutes_text').text(text_minutes);
            container.find('.seconds_text').text(text_seconds);
        }

        // start
        var interval = setInterval(countdown, 1000);
    };

})(jQuery);

$(".openNav").click(function() {
  $("body").toggleClass("navOpen");
  $("nav").toggleClass("open");
  $(".wrapper").toggleClass("open");
  $(this).toggleClass("open");
});





// Second File from here


var today = new Date();
var tomorrow = new Date(today);
tomorrow.setDate(today.getDate() + 1);
var day = tomorrow.getDate();
var month = tomorrow.getMonth() + 1;
var year = tomorrow.getFullYear();

var nextday = month + '/' + day + '/' + year + ' 00:00:00';

$('#example').countdown({
    date: nextday,
    day: 'Day',
    days: 'Days'
}, function () {
    day++;
});


Solution

  • Update - Figured it out, thanks to a guy I met on Discord.

    var curday;
    var secTime;
    var ticker;
     
    function getSeconds() {
     var nowDate = new Date();
     var dy = 4 ; //Sunday through Saturday, 0 to 6
     var countertime = new Date(nowDate.getFullYear(),nowDate.getMonth(),nowDate.getDate(),20,30,0); //20 out of 24 hours = 8pm
     
     var curtime = nowDate.getTime(); //current time
     var atime = countertime.getTime(); //countdown time
     var diff = parseInt((atime - curtime)/1000);
     if (diff > 0) { curday = dy - nowDate.getDay() }
     else { curday = dy - nowDate.getDay() -1 } //after countdown time
     if (curday < 0) { curday += 7; } //already after countdown time, switch to next week
     if (diff <= 0) { diff += (86400 * 7) }
     startTimer (diff);
    }
     
    function startTimer(secs) {
     secTime = parseInt(secs);
     ticker = setInterval("tick()",1000);
     tick(); //initial count display
    }
     
    function tick() {
     var secs = secTime;
     if (secs>0) {
      secTime--;
     }
     else {
      clearInterval(ticker);
      getSeconds(); //start over
     }
     
     var days = Math.floor(secs/86400);
     secs %= 86400;
     var hours= Math.floor(secs/3600);
     secs %= 3600;
     var mins = Math.floor(secs/60);
     secs %= 60;
    
     
    
     //update the time display
     document.getElementById("days").innerHTML = curday;
     document.getElementById("hours").innerHTML = ((hours < 10 ) ? "0" : "" ) + hours;
     document.getElementById("minutes").innerHTML = ( (mins < 10) ? "0" : "" ) + mins;
     document.getElementById("seconds").innerHTML = ( (secs < 10) ? "0" : "" ) + secs;
    
    
    if (curday == 1) {
        document.getElementById("days_text").innerHTML = "Day"
    } 
    
    
    }