プロが教えるわが家の防犯対策術!

JavaScriptで決まった「時刻」にページを移動するには?

お世話になります。

JavaScriptを使い、こちらが決めた時刻に自動的に
指定したページに切り替わりようにすどのようにすれば良いのでしょうか?

例:20時45分に現在のページから「page02.html」に移動する。

<script language="JavaScript" type="text/javascript">
<!--
var time = 45;

function setTimer(){
setTimeout("location.replace( './page02.html')", time * 60 * 1000);
}
//-->
</script>

自分なりに「setTimeout」「location.replace」を使って作ってみました。
移動する動作はリアルタイムで見られて良いのですが、
この場合、ページを開いてから45分後に移動してしまう為
指定した時刻での移動とはなりません。
「setTimeout」を使うのが間違っているような気がしますが、
他にどのようなメソッドを使ってよいのか分からない状態です。

必要に迫られJavaScriptを勉強し始めたばかりで分からないことだらけで
途方に暮れております。

ご指導よろしくお願いします。

A 回答 (5件)

すでにすばらしい回答が出ていますが、一応おいときますね。


function myfunc(h,m,url){
var goTo = function(){location.href = url};

//現在の時刻を秒数にする
var now = new Date();
var currentS = (now.getHours()*60 + now.getMinutes())*60 + now.getSeconds() ;

//目標時刻を秒数にする
var targetS = (h*60 + m)*60;

//あと何秒で目標時刻になるか、差を求める(秒)
var jisaS = targetS - currentS;
//マイナスならすでに 今日は目標時刻を過ぎているということなので1日加算する
if( jisaS < 0 ) jisaS += 24*60*60; //1日の秒数を加算

//確認用
alert("あと"+ jisaS +"秒で "+ h+"時"+ m +"分です");
return setTimeout( goTo, jisaS*1000);
}
myfunc(20,40,"./page02.html");
    • good
    • 2
この回答へのお礼

度々ご指導頂きありがとうございます。

思っていた通りの動作をしてくれました。
今度は指定した日時で動作するよう自分なりにいじっていきたいと思います。

お二方共とても参考になるお答えを頂き感謝致します。
お二方にベストアンサーをお付けしたいのですが、
できないようなので最初にご指導頂いたJaneDue様に
ベストアンサーを付けさせて頂きます。

ありがとうございました。

お礼日時:2010/05/18 21:30

ばぶぅ~の脳内いんたーぷりんたが、ちょっとおかしいかもよ?


ぜんかくくうはくは、はんかくにおきかえてください

var hoge = function ( y, m, d, hh, mm, ss, ms ) {
 return Date.UTC( 1970 + y, 0 + m, 1 + d, hh, mm, ss, ms );
};


var fuga = function ( date, url ) {
 
 var oneDay = 24 * 60 * 60 * 1000;
 var cbFunc = function ( ) { location.href = url };
 var d = new Date;
 var s = d.getTime() - d.getTimezoneOffset() * 60000;
 var m = s % oneDay;

 while( date < m )
  date += oneDay;

 return setTimeout( cbFunc, date - m );
}

fuga( hoge( 0, 0, 0, 20, 45, 0, 000 ), 'http://okwave.jp/qa/q5902053.html' );
    • good
    • 0
この回答へのお礼

度々ご指導頂きありがとうございます。

思ったとおりの動作をしてくれました。
まだちゃんと理解はできていませんが、
色々と試していきたいと思います。

お礼日時:2010/05/18 21:20

var d = new Date(1970,0,1,0,0,0,000);


var ms = d.getTime();
alert("なんで1970/1/1 0:00:00.000なのに、"+ms+"な数字になるのさ?0じゃない?");
alert("でも、その値を、1000*60で割ると、"+ms/60000+"になるよ");
alert("これとおなじじゃん"+d.getTimezoneOffset());
    • good
    • 0
この回答へのお礼

ありがとうございます。

自分にとって時間の計算はなかなか難しいところですが、
これを参考に勉強していきたいと思います。

お礼日時:2010/05/18 21:17

じさ

この回答への補足

ありがとうございます。

恥ずかしいながら時差の求め方が分かりません。

補足日時:2010/05/18 13:01
    • good
    • 0
この回答へのお礼

ありがとうございます。

考え方のヒントになりました。
これからも頑張っていきたいと思います。

お礼日時:2010/05/18 21:14

<script language="JavaScript">


<!--

function goToPage02(){
//まずは現在の時刻を得る
var now = new Date();
var hour = now.getHours(); //時
var min = now.getMinutes();//分

//もし21時 45分なら 指定ページへ飛ぶ
if( hour==20 && min==45){
location.replace( './page02.html');

}else{
//それ以外であれば、1分後に再度確認する。
//(またはあと何分で20時45分になるか算出して、そのミリ秒後にsetTimeout()すればなお良し)
setTimeout("goToPage02()", 60000);
}
}
goToPage02();
//-->
</script>

この回答への補足

ご回答頂きありがとうございます。
指定した時刻にページが移動できるようになりましたが、
この場合リロードしないとpage02が表示されませんでした。

>>(またはあと何分で20時45分になるか算出して、そのミリ秒後にsetTimeout()すればなお良し)
これを使えリロードしなくても20時44分からページを見ていて20時45分になったらパッと
page02に切り替わってくれるのではないかと思い一晩かけて作ってみましたが
うまくできませんでした。

<script language="JavaScript">
<!--
//fromDate(現在の時刻)からtoDate(指定時刻)を計算する,
function calcDays(fromDate, toDate) {
var elapse = toDate.getTime() - fromDate.getTime();
}

//現在の日時を取得
var now = new Date();

//指定時刻
var xday = new Date(now.getFullYear(), 4, 18, 20, 45);

//現在時刻からあと何分で指定時刻になるか算出。daysLeftに格納。そのミリ秒後にsetTimeout()
var daysLeft = calcDays(now, xday);

//setTimeoutで時間が来たらページを移動
function goToPage02(){
setTimeout("location.replace( './page02.html')", daysLeft);
}
goToPage02();
//-->
</script>

ミリ秒の計算やその他色々間違っていると思うのですが、
どこがどう間違っているのか見当がつかず悩んでおります。
解決策はないでしょうか?
宜しくお願いします。

補足日時:2010/05/18 08:10
    • good
    • 0
この回答へのお礼

ありがとうございます。

ひとつの事が分かるとまた新たな疑問が出てきたりして大変ですが
勉強していきたいと思います。

お礼日時:2010/05/18 21:13

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!