Jak odświeżyć stronę w danym miesiącu. JS

głosy
2

Mam funkcję, która odświeża moją stronę o określonej godzinie i dzień, ale w jaki sposób można odświeżyć tylko w danym miesiącu i daty w określonym czasie? Powodem, dla którego chcę to zrobić, bo moja strona sprawdza dostępność aktualizacji transferów piłkarskich, które ma miejsce tylko w określonych miesiącach.

Oto moja funkcja odświeżyć pewien czas w ciągu dnia

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);
    }
}
Utwórz 30/01/2014 o 17:00
użytkownik
W innych językach...                            


1 odpowiedzi

głosy
2

Mam oczyścić swój kod nieco i dodano w jednej linii, które również pozwalają ustawić konkretną datę i miesiąc:

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

Mam nadzieję, że komentarze wyjaśniają, jakie modyfikacje zrobiłem. Jeśli coś jest niejasne, prosimy o komentarz do tej odpowiedzi opuścić.

Linia month!=undefined ? month : now.getUTCMonth(),wykonuje następujące czynności:

Jeśli miesiąc jest nie zdefiniowana, a następnie wypełnić w miesiącu, a jeśli to nie jest wypełnione, a następnie użyć bieżącego miesiąca. Oznacza to, że przy użyciu następującej składni będzie nadal działać:

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

Date jako parametr

Można również zrobić to nieco łatwiej po prostu dostarczanie Dateobiekt jako parametr, zamiast każdej zmiennej indywidualnej. Że będzie wyglądać następująco:

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

To może być wywołane poprzez

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

To ustawia timer odświeżania 30 Jan 2014 23:59:59 UTC.

Odpowiedział 30/01/2014 o 17:26
źródło użytkownik

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