Come aggiornare una pagina in un determinato mese. JS

voti
2

Ho una funzione che consente di aggiornare la mia pagina in un momento e giorno specifico, ma come posso aggiornare solo su un mese e data specifica in un determinato momento? Il motivo per cui voglio fare questo è perché i miei assegni del sito web per gli aggiornamenti sui trasferimenti di calcio che avviene solo in mesi specifici.

Qui è la mia funzione per aggiornare certo tempo in un giorno

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);
    }
}
È pubblicato 30/01/2014 alle 17:00
dall'utente
In altre lingue...                            


1 risposte

voti
2

Ho ripulito il codice un po ', e ha aggiunto in una linea che permetterà anche di impostare una data e mese specifico:

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);
    }
}

Spero che i commenti chiarire cosa modifiche che ho fatto. Se qualcosa non è ancora chiaro, si prega di lasciare un commento a questa risposta.

La linea month!=undefined ? month : now.getUTCMonth(),effettua le seguenti operazioni:

Se il mese è non indefinito, quindi compilare il mese, e se non viene compilato, quindi utilizzare il mese corrente. Questo significa che utilizzando la seguente sintassi sarebbe ancora lavorare:

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

Date come parametro

È anche possibile fare di questo un po 'più facile da solo fornendo un Dateoggetto come parametro, invece di ogni singola variabile. Che sarebbe simile a questa:

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);
    }
}

Questo può essere chiamato via

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

Questo imposta un timer di aggiornamento per 30 gennaio 2014, 23:59:59 UTC.

Risposto il 30/01/2014 a 17:26
fonte dall'utente

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