Cómo actualizar una página en un determinado mes. JS

votos
2

Tengo una función que refresca mi página a la hora y día específico, pero cómo puedo actualizar sólo en un mes y la fecha específica en un momento determinado? La razón por la que quiero hacer esto se debe a mi página web busca actualizaciones sobre las transferencias de fútbol que sólo tiene lugar en determinados meses.

Aquí está mi función para refrescar cierto tiempo en un día

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);
    }
}
Publicado el 30/01/2014 a las 17:00
por usuario
En otros idiomas...                            


1 respuestas

votos
2

He limpiado su código un poco, y se añaden en una línea que también permitirá establecer una fecha y mes específico:

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

Espero que los comentarios dejar claro qué modificaciones que hice. Si hay algo que todavía no está claro, por favor dejar un comentario a esta respuesta.

La línea de month!=undefined ? month : now.getUTCMonth(),hace lo siguiente:

Si el mes es no indefinido, a continuación, rellene el mes, y si no se rellena, a continuación, utilizar el mes en curso. Esto significa que mediante la siguiente sintaxis aún funcionaría:

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

Date como parámetro

También puede hacer esto un poco más fácil con sólo el suministro de un Dateobjeto como un parámetro, en lugar de cada variable individual. Eso sería algo como esto:

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

Esto puede ser llamado a través

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

Esto establece un temporizador de renovación para el 30 de Ene de 2014, 23:59:59 UTC.

Respondida el 30/01/2014 a las 17:26
fuente por usuario

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