Как автоматически перезагрузить веб-страницу в определенное время? - PullRequest
13 голосов
/ 02 августа 2009

У меня есть веб-сайт, который я хочу перезагрузить в определенное время, например, в 15:35, а не через определенный интервал, например, 5 минут. Как мне это сделать?

Ответы [ 7 ]

47 голосов
/ 02 августа 2009

Следующий фрагмент JavaScript позволит вам обновить в определенный момент времени:

function refreshAt(hours, minutes, seconds) {
    var now = new Date();
    var then = new Date();

    if(now.getHours() > hours ||
       (now.getHours() == hours && now.getMinutes() > minutes) ||
        now.getHours() == hours && now.getMinutes() == minutes && now.getSeconds() >= seconds) {
        then.setDate(now.getDate() + 1);
    }
    then.setHours(hours);
    then.setMinutes(minutes);
    then.setSeconds(seconds);

    var timeout = (then.getTime() - now.getTime());
    setTimeout(function() { window.location.reload(true); }, timeout);
}

Затем вы можете добавить тег сценария для вызова функции refreshAt().

refreshAt(15,35,0); //Will refresh the page at 3:35pm
5 голосов
/ 02 августа 2009
<META HTTP-EQUIV="Refresh" CONTENT="5">

это заставит страницу обновляться каждые 5 секунд. Просто рассчитайте правильный интервал и добавьте его в тег содержимого

1 голос
/ 19 января 2011

Я нашел эту страницу с похожим вопросом и использовал ее, чтобы получить более конкретный ответ, который может быть полезен для некоторых. Для этого проекта мы хотели убедиться, что страница обновилась сразу после того, как должно было начаться живое событие, представляющее глобальный интерес, активировав проигрыватель, встроенный на страницу пользователя (я знаю, в узком случае использования - другие могут лучше использовать Это).

Одна из проблем в приведенных выше ответах заключалась в том, как обращаться с конверсиями часовых поясов, что было для нас большей проблемой, потому что мы хотели убедиться, что страница обновляется в определенный день и время. Чтобы сделать это, я взял UTC-версию целевой даты и сегодняшней даты, преобразовал их в GMT, затем установил функцию времени ожидания Эндрю на разницу между ними.


var target = new Date("January 28, 2011 13:25:00");
timeOffset = target.getTimezoneOffset() * 60000;
targetTime = target.getTime();
targetUTC = targetTime + timeOffset;

var today = new Date();
todayTime = today.getTime();
todayUTC = todayTime + timeOffset;

refreshTime = (targetUTC - todayUTC);
if (refreshTime > 1) {
    setTimeout(function() { window.location.reload(true); }, refreshTime);
}
1 голос
/ 02 августа 2009

Как правило, при доступе к странице рассчитайте, сколько времени осталось между временем доступа и временем, которое вы хотите перезагрузить страницу, и используйте это оставшееся время в заголовке метаобновления. Очевидно, что это должно быть сделано в CGI-скрипте или веб-приложении или, возможно, с помощью SSI (на стороне сервера); он не будет работать, если у вас есть только статический HTML-файл.

Другой альтернативой может быть использование Javascript, но он не будет работать, если на клиенте отключен Javascript.

0 голосов
/ 15 августа 2018

Это работало лучше для моих целей.

Если вы можете использовать Jquery и MomentJs, вы можете сделать это:

(function () {
    var $ = require('jquery');
    var moment = require('moment');

    function refreshPageAtTime(expiration, countdownElement) {
        var now = moment.utc();
        console.log('now', now);
        var expirationMoment = moment.utc(expiration, 'YYYY-MM-DD kk:mm:ss');
        console.log('target', expirationMoment);
        var secondsUntilRefresh = expirationMoment.diff(now, 'seconds');//http://momentjs.com/docs/#/displaying/difference/
        console.log('diff in seconds', secondsUntilRefresh);
        if (secondsUntilRefresh > 1) {
            setInterval(function () {
                secondsUntilRefresh--;
                console.log('seconds remaining', secondsUntilRefresh, 'seconds');
                if (secondsUntilRefresh <= 10) {
                    countdownElement.html(secondsUntilRefresh + '...');
                    if (secondsUntilRefresh === 0) {
                        console.warn('Refreshing now at ' + moment.utc());
                        window.location.reload(true);
                    }
                }
            }, 1000 * 1);
        }
    }

    $(document).ready(function () {
        var expiration = $('form').attr('data-expiration');
        console.log('expiration', expiration);
        $('.btn-primary:submit').after('<div id="countdownToRefresh" style="display: inline-block; color: #999; padding: 10px;"></div>');
        refreshPageAtTime(expiration, $('#countdownToRefresh'));

    });
})();
0 голосов
/ 21 ноября 2013

Используйте это для обновления страницы каждые 20 секунд.

<META HTTP-EQUIV="refresh" CONTENT="20">
0 голосов
/ 02 августа 2009

По сути, существует множество javascript-кодов, которые могут обновлять страницу сколько угодно минут или около того, вы можете редактировать их так, чтобы они обновлялись и в часы. Как этот:

//enter refresh time in "minutes:seconds" Minutes: 0 to Whatever
//Seconds should range from 0 to 59
var limit = "0:30";

if (document.images) {
    var parselimit = limit.split(":");
    parselimit = parselimit[0] * 60 + parselimit[1] * 1;
}
var beginrefresh = function () {
    if (!document.images) return if (parselimit == 1) window.location.reload()
    else {
        parselimit -= 1;
        curmin = Math.floor(parselimit / 60);
        cursec = parselimit % 60;
        if (curmin != 0) curtime = curmin + " minutes and " + cursec + " seconds left until page refresh!";
        else curtime = cursec + " seconds left until page refresh!";
        window.status = curtime;
        setTimeout("beginrefresh()", 1000);
    }
}

window.onload = beginrefresh;

(теперь просто подсчитайте минуты и секунды, которые вы хотите обновить, например, в полдень каждый день, если бы это был полдень:

var limit = "1440:00";

Теперь вы можете использовать этот код, за исключением того, что большинство из них не работают с серверным временем, а с информацией, которую вы нам предоставили, мы действительно больше ничего не можем сделать. Отредактируйте свой вопрос и сообщите нам, хотите ли вы, чтобы он был рассчитан по времени серверов или что-то еще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...