Comment rafraîchir une page dans un certain mois. JS

voix
2

J'ai une fonction qui rafraîchit ma page à un moment précis et jour, mais comment puis-je rafraîchir seulement sur un mois et une date à un certain moment? La raison pour laquelle je veux faire est parce que mes chèques de site Web pour les mises à jour sur les transferts de football qui a lieu seulement sur certains mois.

Voici ma fonction pour rafraîchir certain temps dans une journée

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);
    }
}
Créé 30/01/2014 à 17:00
utilisateur
Dans d'autres langues...                            


1 réponses

voix
2

J'ai nettoyé votre code un peu, et ajouté en ligne qui vous permettent également de fixer une date précise et mois:

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

J'espère que les commentaires font clairement quelles modifications j'ai fait. Si quelque chose ne sait pas encore, s'il vous plaît laisser un commentaire à cette réponse.

La ligne de month!=undefined ? month : now.getUTCMonth(),fait ce qui suit:

Si le mois est pas indéfini, puis remplissez le mois, et si elle n'est pas rempli, puis utilisez le mois en cours. Cela signifie que l' utilisation de la syntaxe suivante fonctionne encore:

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

Date comme paramètre

Vous pouvez également faire un peu plus facile par simple fourniture d' un Dateobjet en tant que paramètre, au lieu de chaque variable. Cela ressemblerait à quelque chose comme ceci:

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

Cela peut ensuite être appelé via

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

Ceci définit une minuterie de rafraîchissement 30 à janvier 2014, 23:59:59 UTC.

Créé 30/01/2014 à 17:26
source utilisateur

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