Hvordan oppdaterer en side i en bestemt måned. JS

stemmer
2

Jeg har en funksjon som oppdaterer siden min på et bestemt tidspunkt og dag, men hvordan kan jeg oppdatere bare på en bestemt måned og dato på et bestemt tidspunkt? Grunnen til at jeg ønsker å gjøre dette er fordi min nettside sjekker for oppdateringer om fotball overføringer som bare foregår på bestemte måneder.

Her er min funksjon å oppdatere viss tid på en 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);
    }
}
Publisert på 30/01/2014 klokken 16:00
bruker
På andre språk...                            


1 svar

stemmer
2

Jeg har ryddet opp koden din litt, og lagt i en linje som også vil la deg sette en bestemt dato og måned:

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

Jeg håper kommentarene gjøre det klart hvilke endringer jeg har gjort. Hvis noe er uklart, vennligst legg igjen en kommentar til dette svaret.

Linjen av month!=undefined ? month : now.getUTCMonth(),gjør følgende:

Hvis måneden er ikke udefinert, deretter fylle i måneden, og hvis det ikke er fylt ut, og deretter bruke den aktuelle måneden. Dette betyr at ved hjelp av følgende syntaks vil fortsatt fungere:

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

Date som parameter

Du kan også gjøre dette litt enklere ved å bare levere en Dategjenstand som en parameter, i stedet for hver enkelt variabel. Det vil se omtrent slik ut:

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

Dette kan da bli kalt via

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

Dette setter en oppdatering timer for den 30 januar 2014, 23:59:59 UTC.

Svarte 30/01/2014 kl. 16:26
kilden bruker

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