Hoe maak je een pagina te vernieuwen in een bepaalde maand. JS

stemmen
2

Ik heb een functie die mijn pagina ververst op een bepaalde tijd en dag, maar hoe kan ik alleen vernieuwd op een bepaalde maand en dag op een bepaalde tijd? De reden waarom ik dit wil doen is omdat mijn website controleert op updates op voetbal transfers die alleen vindt plaats op specifieke maanden.

Hier is mijn functie voor bepaalde tijd te vernieuwen in een dag

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);
    }
}
De vraag is gesteld op 30/01/2014 om 17:00
user
In andere talen...                            


1 antwoorden

stemmen
2

Ik heb opgeruimd uw code een beetje, en voegde in een lijn die ook zou laten u een specifieke datum en maand in te stellen:

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

Ik hoop dat de opmerkingen duidelijk maken welke wijzigingen ik heb gemaakt. Als er iets is nog onduidelijk, laat dan een reactie op dit antwoord.

De lijn van month!=undefined ? month : now.getUTCMonth(),doet het volgende:

Als de maand is niet ongedefinieerd, dan in de maand te vullen, en als het niet is ingevuld, gebruik dan de huidige maand. Dit betekent dat het gebruik van de volgende syntaxis zou nog steeds werken:

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

Date als parameter

U kunt ook dit een beetje makkelijker door alleen het leveren van een Dateobject als een parameter, in plaats van elke individuele variabele. Dat zou er ongeveer zo uitzien:

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

Dit kan dan worden opgeroepen via

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

Hiermee wordt een refresh timer voor 30 januari 2014, 23:59:59 UTC.

antwoordde op 30/01/2014 om 17:26
bron van user

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