Return the next localized countdown timer date

I have this code that does the calculation to find the localized UTC time. Based on this UTC time, there is another function that will calculate the next date and time of the event for me. If the time is between Sunday @ 12 and Wednesday @ 8, it will give me the date of the event due to the intrusion, otherwise it will give me the next date of the event on Sunday. Then I take this settlement date, separate it and pass it as a parameter to the countdown timer.

I am wondering if there is a more optimized way to do this, especially with conditional statements, and where do I divide the time into parameters.

$(function () {
// Calculate the time locally
function calcLocalizedTime() {
    var d = new Date(); // Date for current location
    var utc = d.getTime() + (d.getTimezoneOffset() * 60000); // convert to msec add local time zone offset get UTC time in msec
    var nd = new Date(utc + (3600000 * -5));
    return nd; // return localized datetime
}

// Calculate the next Webcast DateTime
function calcNextWebCast(date) {
    var localizedTime = new Date(date||new Date()); // localized datetime
    var nextDate = new Date(date||new Date()); // Next webcast datetime object
    var today = localizedTime.getDay() + '' + localizedTime.getHours(); // format localized datetime for comparison

    if (today >= 012 && today <=320 ) { // is today between Sun @ 12 or Wednesday @ 8
        nextDate.setDate(nextDate.getDate() + (3 - 1 - nextDate.getDay() + 7) % 7 + 1);
        nextDate.setHours(20,0,0,0);
    } else {
        nextDate.setDate(nextDate.getDate() + (3 - 4 - nextDate.getDay() + 7) % 7 + 1);
        nextDate.setHours(12,0,0,0);
    }

    return nextDate;
}

var localizedTime = calcLocalizedTime();
var nextWebCast = calcNextWebCast(localizedTime);
var m = nextWebCast.getMonth() + 1;
var d = nextWebCast.getDate();
var y = nextWebCast.getFullYear();
var hh = nextWebCast.getHours();
var mm = nextWebCast.getMinutes();

$('#defaultCountdown').countdown({until: $.countdown.UTCDate(-5, y, m-1, d, hh, mm)});

});
+2
1

, , .

:

function foo(nextDate)
 {
 calcNextWebCast.nextDate.setDate(calcNextWebCast.nextDate.getDate() + (3 - 1 - nextDate.getDay() + 7) % 7 + 1);
 calcNextWebCast.nextDate.setHours(20,0,0,0);
 }

function bar(nextDate)
 {
 calcNextWebCast.nextDate.setDate(calcNextWebCast.nextDate.getDate() + (3 - 4 - nextDate.getDay() + 7) % 7 + 1);
 calcNextWebCast.nextDate.setHours(12,0,0,0);
 }


function calcNextWebCast(date) {
 calcNextWebCast.nextDate = new Date(date||new Date()); // Next webcast datetime object

 var localizedTime = new Date(date||new Date()); // localized datetime
 var today = localizedTime.getDay() + '' + localizedTime.getHours(); // format localized datetime for comparison

 var range = "012|[0][1][3-9]|[0][2-9][0-9]|[1-2][0-9][0-9]|[3][0-1][0-9]|320";

 var datemap = { "true":foo, "false":bar }

 var jump = RegExp(range).test(today);

 var go = datemap[jump];

 go();

 return nextDate;
 }

+1

Source: https://habr.com/ru/post/1771753/


All Articles