web-dev-qa-db-ja.com

特定の時間にWebページを自動的にリロードするにはどうすればよいですか?

5分などの特定の間隔の後ではなく、午後3時35分などの特定の時間にリロードしたいWebサイトがあります。それ、どうやったら出来るの?

15
Edwin

次の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
_
52
Andrew Moore
<META HTTP-EQUIV="Refresh" CONTENT="5">

これにより、ページは5秒ごとに強制的に再読み込みされます。正しい間隔を計算して、コンテンツタグに追加するだけです

6
Sorantis

私は同様の質問でこのページを見つけ、それを使用して、一部の人に役立つ可能性のあるより具体的な回答をハックアウトしました。このプロジェクトでは、グローバルに関心のあるライブイベントが開催されようとしたときにページが更新され、ユーザーのページに埋め込まれたプレーヤーがアクティブ化されるようにしたかったのです(狭いユースケース、私は知っています-他の人がより良い使用法を持っているかもしれませんそれ)。

上記の回答の1つの課題は、タイムゾーンの変換をどのように処理するかでした。これは、特定の日時にページを更新することを確認したかったため、私たちにとってより大きな問題でした。これを行うには、目標日と今日の日付のUTCバージョンを取得し、それらをGMTに変換してから、Andrewのタイムアウト関数を2つの差に設定しました。


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
schnippy

基本的に、ページにアクセスするときは、アクセス時間とページをリロードする時間の間に残っている時間を計算し、その残り時間をメタリフレッシュヘッダーで使用します。明らかに、これはCGIスクリプトまたはWebアプリケーションで、あるいはSSI(サーバーサイドインクルード)を使用して実行する必要があります。静的なHTMLファイルしかない場合は機能しません。

もう1つの方法は、Javascriptを使用することですが、クライアントでJavascriptが無効になっている場合は機能しません。

1
David Z

私はこの助けを願っています、あなたはリフレッシュのための正確な時間を設定することができます

var target = new Date("November 18, 2019 10:00: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);
}

これは私の目的にはうまく機能しました。

JqueryとMomentJを使用できる場合は、次のように実行できます。

(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
Ryan

基本的に、ページを数分程度で更新できる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";

これで、このコードを使用できますが、ほとんどのコードはサーバー時間では機能しません。また、提供された情報では、これ以上何もできません。質問を編集して、サーバーの時間と同じタイミングにするか、それとも他の時間にするかを教えてください。

0
Tony C