Como atualizar uma página em um determinado mês. JS

votos
2

Eu tenho uma função que refresca minha página em um momento específico e dia, mas como posso atualizar somente em um mês e data específica em um determinado momento? A razão pela qual eu quero fazer isso é porque meus cheques site para atualizações sobre transferências de futebol que só ocorre em meses específicos.

Aqui é a minha função para atualizar certo tempo em um dia

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 30/01/2014 em 17:00
usuário
Em outras línguas...                            


1 respostas

votos
2

Eu limpo o seu código um pouco, e acrescentou em uma linha que também permitem que você defina uma data e mês 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 os comentários fazem que modificações claras que fiz. Se alguma coisa ainda não está claro, por favor deixe um comentário para esta resposta.

A linha de month!=undefined ? month : now.getUTCMonth(),faz o seguinte:

Se o mês é não indefinido, em seguida, preencha o mês, e se não for preenchido, em seguida, usar o mês atual. Isso significa que usando a seguinte sintaxe ainda iria funcionar:

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

Date como parâmetro

Você também pode fazer isso um pouco mais fácil por apenas fornecendo um Dateobjeto como um parâmetro, em vez de cada variável individual. Isso seria algo parecido com isto:

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

Este pode então ser chamado via

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

Isso define um temporizador de atualização para 30 de janeiro de 2014, 23:59:59 UTC.

Respondeu 30/01/2014 em 17:26
fonte usuário

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