- ベストアンサー
JavaScriptで決まった時刻にページを移動する方法
- JavaScriptを使って決めた時刻に自動的に指定したページに切り替わる方法について教えてください。
- 現在のページから指定した時刻になったら特定のページに移動する方法を、JavaScriptを用いて作成したのですが、想定通りに動作していません。
- setTimeoutやlocation.replaceを使用して移動する方法を試しましたが、ページを開いてから指定された時刻ではなく45分後に移動してしまいます。適切な方法を教えてください。
- みんなの回答 (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");
その他の回答 (4)
- babu_baboo
- ベストアンサー率51% (268/525)
ばぶぅ~の脳内いんたーぷりんたが、ちょっとおかしいかもよ? ぜんかくくうはくは、はんかくにおきかえてください 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' );
お礼
度々ご指導頂きありがとうございます。 思ったとおりの動作をしてくれました。 まだちゃんと理解はできていませんが、 色々と試していきたいと思います。
- babu_baboo
- ベストアンサー率51% (268/525)
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());
お礼
ありがとうございます。 自分にとって時間の計算はなかなか難しいところですが、 これを参考に勉強していきたいと思います。
- babu_baboo
- ベストアンサー率51% (268/525)
じさ
お礼
ありがとうございます。 考え方のヒントになりました。 これからも頑張っていきたいと思います。
補足
ありがとうございます。 恥ずかしいながら時差の求め方が分かりません。
- JaneDue
- ベストアンサー率75% (263/350)
<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> ミリ秒の計算やその他色々間違っていると思うのですが、 どこがどう間違っているのか見当がつかず悩んでおります。 解決策はないでしょうか? 宜しくお願いします。
お礼
度々ご指導頂きありがとうございます。 思っていた通りの動作をしてくれました。 今度は指定した日時で動作するよう自分なりにいじっていきたいと思います。 お二方共とても参考になるお答えを頂き感謝致します。 お二方にベストアンサーをお付けしたいのですが、 できないようなので最初にご指導頂いたJaneDue様に ベストアンサーを付けさせて頂きます。 ありがとうございました。