5 分などの特定の間隔の後ではなく、午後 3 時 35 分などの特定の時間にリロードしたい Web サイトがあります。それ、どうやったら出来るの?
9 に答える
次の 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
このコードは、クライアントの現地時間に基づいて更新されることに注意してください。クライアントのタイムゾーンに関係なく特定の時間にしたい場合は、時間オブジェクトのget*()
とset*()
(を除く) をそれらと同等のものに置き換えて、UTC に固定することができます。getTime()
getUTC*()
setUTC*()
<META HTTP-EQUIV="Refresh" CONTENT="5">
これにより、5 秒ごとにページが強制的にリロードされます。正しい間隔を計算して content タグに追加するだけです
このページに同様の質問があり、それを使用して、一部の人に役立つ可能性のあるより具体的な回答をハックしました. このプロジェクトでは、世界的に関心のあるライブ イベントが開始されようとしているときにページが更新され、ユーザーのページに埋め込まれたプレーヤーがアクティブになるようにしたいと考えました (狭いユース ケースです。それ)。
上記の回答における課題の 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);
}
基本的には、ページがアクセスされたとき、アクセス時刻からページをリロードしたい時刻までの残り時間を計算し、その残り時間をメタリフレッシュヘッダーに使用します。明らかに、これは CGI スクリプトまたは Web アプリケーションで行う必要があるか、場合によっては SSI (サーバー側インクルード) で行う必要があります。静的な HTML ファイルしかない場合は機能しません。
別の方法として Javascript を使用することもできますが、クライアントで Javascript が無効になっている場合は機能しません。
基本的に、ページを数分または何かで更新できる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";
これで、このコードを使用できますが、それらのほとんどはサーバー時間では機能しません。また、提供された情報では、これ以上何もできません。質問を編集して、サーバーの時間に合わせるか、それとも別の時間にするかをお知らせください。
これを使用して、20 秒ごとにページを更新します。
<META HTTP-EQUIV="refresh" CONTENT="20">