Как обновить страницу в определенном месяце. JS

голоса
2

У меня есть функция, которая обновляет свою страницу в определенное время и день, но как я могу обновить только на определенный месяц и дату в определенное время? Причина, почему я хочу сделать это, потому что мой сайт проверяет наличие обновлений на футбольных передачах, что имеет место только на определенные месяцы.

Вот моя функция, чтобы обновить определенное время в течение дня

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);
    }
}
Задан 30/01/2014 в 17:00
пользователем
На других языках...                            


1 ответов

голоса
2

Я очищен ваш код немного, и добавил в линии, которая также позволит вам установить конкретную дату и месяц:

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

Я надеюсь, что комментарии делают ясно, что изменения, которые я сделал. Если что-то до сих пор неясно, пожалуйста, оставьте комментарий к этому ответу.

Линия month!=undefined ? month : now.getUTCMonth(),выполняет следующие действия :

Если месяц не определен, а затем заполнить в течение месяца, и если она не заполнена, а затем использовать текущий месяц. Это означает , что , используя следующий синтаксис будет работать:

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

Date в качестве параметра

Вы также можете сделать это немного проще, просто поставляя Dateобъект в качестве параметра, а не каждой отдельной переменной. Это будет выглядеть примерно так:

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

Это может быть затем вызывается через

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

Это устанавливает таймер обновления для 30 Янв 2014, 23:59:59 UTC.

Ответил 30/01/2014 в 17:26
источник пользователем

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