Cum se reîmprospătează o pagină într-o anumită lună. JS

voturi
2

Am o funcție care reîmprospătează pagina mea la un moment dat și o anumită zi, dar cum pot actualiza doar pe o lună și data specifică la un anumit moment? Motivul pentru care vreau să fac acest lucru se datorează faptului că site-ul meu controale pentru actualizări privind transferurile de fotbal, care are loc numai în anumite luni.

Aici este funcția mea pentru a actualiza anumită perioadă de timp într-o zi

function refreshAt(hours, minutes, seconds, day) {
    var now = new Date();
    var then = new Date();
    var dayUTC = new Date();

    if(dayUTC.getUTCDay() == day) {

        if(now.getUTCHours() > hours ||
        (now.getUTCHours() == hours && now.getUTCMinutes() > minutes) ||
        now.getUTCHours() == hours && now.getUTCMinutes() == minutes && now.getUTCSeconds() >= seconds) {
            then.setUTCDate(now.getUTCDate() + 1);
        }

        then.setUTCHours(hours);
        then.setUTCMinutes(minutes);
        then.setUTCSeconds(seconds);


        var timeout = (then.getTime() - now.getTime());
        setTimeout(function() { window.location.reload(true); }, timeout);
    }
}
Întrebat 30/01/2014 la 17:00
de către utilizator
În alte limbi...                            


1 răspunsuri

voturi
2

Am curățat codul un pic, și a adăugat într-o linie care ar permite, de asemenea, să setați o dată și lună specifice:

function refreshAt(hours, minutes, seconds, day, month) { // added month argument
    var now = new Date();
    var then = new Date( // used format: new Date(Y, M, D, h, m, s);
        now.getUTCFullYear(),
        month!=undefined ? month : now.getUTCMonth(),
        day,
        hours,
        minutes,
        seconds
    ); // fill in the date when defining the variable

    // You don't need a seperate Date object to get the UTC date

    if (now.getUTCDate() == day && (month == undefined || now.getUTCMonth() == month)) {
        if(now.getTime() > then.getTime()) {
            then.setUTCDate(now.getUTCDate() + 1);
        }

        // exit function if the new time is still after the current time
        if (now.getTime() > then.getTime()) return;

        // you don't need brackets around this
        var timeout = then.getTime() - now.getTime();
        setTimeout(function() { window.location.reload(true); }, timeout);
    }
}

Sper comentariile face clar ce modificări am făcut. Dacă ceva este încă neclar, vă rugăm să lăsați un comentariu la acest răspuns.

Linia de month!=undefined ? month : now.getUTCMonth(),face următoarele:

În cazul în care luna este nu nedefinit, apoi completați luna, iar dacă nu este completat, apoi utilizați luna curentă. Acest lucru înseamnă că , folosind următoarea sintaxă va funcționa în continuare:

refreshAt(23, 59, 59, 30); //refreshes at 23:59:59 UTC today (30 Jan 2014)

Date ca parametru

Puteți face , de asemenea , acest lucru un pic mai ușor prin furnizarea de doar un Dateobiect ca parametru, în locul fiecărei variabile individuale. Asta ar arata ceva de genul:

function refreshAt(date) { // added month argument
    var now = new Date();

    if (now.getUTCDate() == date.getUTCDate()) {
        var timeout = date.getTime() - now.getTime();
        if (timeout > 0)
            setTimeout(function() { window.location.reload(true); }, timeout);
    }
}

Acest lucru poate fi numit prin

refreshAt(new Date(2014, 0, 30, 23, 59, 59));

Aceasta stabilește un temporizator de reîmprospătare pentru 30 ianuarie 2014, 23:59:59 UTC.

Publicat 30/01/2014 la 17:26
sursa de către utilizator

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more