JavaScriptで決まった時刻にページを移動する方法

このQ&Aのポイント
  • JavaScriptを使って決めた時刻に自動的に指定したページに切り替わる方法について教えてください。
  • 現在のページから指定した時刻になったら特定のページに移動する方法を、JavaScriptを用いて作成したのですが、想定通りに動作していません。
  • setTimeoutやlocation.replaceを使用して移動する方法を試しましたが、ページを開いてから指定された時刻ではなく45分後に移動してしまいます。適切な方法を教えてください。
回答を見る
  • ベストアンサー

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

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を勉強し始めたばかりで分からないことだらけで 途方に暮れております。 ご指導よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • JaneDue
  • ベストアンサー率75% (263/350)
回答No.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");

mega-aki
質問者

お礼

度々ご指導頂きありがとうございます。 思っていた通りの動作をしてくれました。 今度は指定した日時で動作するよう自分なりにいじっていきたいと思います。 お二方共とても参考になるお答えを頂き感謝致します。 お二方にベストアンサーをお付けしたいのですが、 できないようなので最初にご指導頂いたJaneDue様に ベストアンサーを付けさせて頂きます。 ありがとうございました。

その他の回答 (4)

回答No.4

ばぶぅ~の脳内いんたーぷりんたが、ちょっとおかしいかもよ? ぜんかくくうはくは、はんかくにおきかえてください 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' );

mega-aki
質問者

お礼

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

回答No.3

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());

mega-aki
質問者

お礼

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

回答No.2

じさ

mega-aki
質問者

お礼

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

mega-aki
質問者

補足

ありがとうございます。 恥ずかしいながら時差の求め方が分かりません。

  • JaneDue
  • ベストアンサー率75% (263/350)
回答No.1

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

mega-aki
質問者

お礼

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

mega-aki
質問者

補足

ご回答頂きありがとうございます。 指定した時刻にページが移動できるようになりましたが、 この場合リロードしないと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> ミリ秒の計算やその他色々間違っていると思うのですが、 どこがどう間違っているのか見当がつかず悩んでおります。 解決策はないでしょうか? 宜しくお願いします。

関連するQ&A

  • JavaScriptでページ移動関係の質問です。

    JavaScriptでページ移動関係の質問です。 今、私がしたいと思っていることは、ある関数を実行して http://aaa/page=1?a=b,http://aaa/page=2?a=b,http://aaa/page=3?a=b,・・・ と指定ページ(最後のページ: page=X)まで 1.全ページにわたり、 2.ページ内にある要素があるか調べる関数を走らせ、 その結果をアラートなどでわかるようにすることです。 2は完成していて、1について実現できず困っています。 location.hrefを使ってsetTimeoutで時間を何秒かごとにしても、一回移動してしまえばスクリプトはもう動かなくなってしまいます。 例) location.href=getXXXURL(++currentPage);//移動 bool=findUser(searchID,currentPage);//探す alert(bool); この2を実現する方法についてコードの例を交えて、教えていただきたいです。 よろしくお願いいたします。

  • Javascriptで自動更新

    あるページを10秒に一度、自動で更新させたいのですがなにかよい方法はありませんか? このサイトで見かけたスクリプトを試してみても動作しませんでした;; <script language="JavaScript"> <!-- min=60; setTimeout('reload()', min*1000); function reload() { location.href=location.href; } //--> </script> Javascriptで実現する方法があれば教えてください。

  • JavaScriptでページが移動しても

    JavaScriptの勉強をはじめたばかりなので、 的外れな質問をしてしまうかもしれないのですが宜しくお願いします。 Google ChromeやFirefoxのdeveloper toolsのコンソールにスクリプトを書いて 実行しています。 JavaScriptでは一つ目のページで実行したスクリプトで 次のページのフォーム操作などは出来ますか? 注文をする時に、一番初めのページで大きさなどを選んで、submitメソッドを使ってそのページのフォームを送信する事は出来ました。 そしてフォームを送信するとページが変わり、次のページにもまた違うセレクトメニューの項目が出てきて選択項目を選んでフォームを送信する事も出来ました。 1ページずつならコンソール部分にスクリプトを書いて、項目を選択してフォームを送信する事は出来るようになったのですが、 一番初めのページで次のページ分のスクリプトを合体させ、次のページ分の処理も一回の実行でしようとしても次のページ分の処理が出来ません。 ページが移動しても流れが止まらず処理させる事って出来ますか? その場合どのような物を初めのページと次のページのスクリプトの間に挟めばいいのですか?

  • 条件を満たしたら、別のページに飛ばしたい

    質問させていただきます フォームからもらった値を調べ、条件が成立したら 別のページに飛ばす、ということは可能でしょうか? ↓ソースの一部です if($_GET['pass']=="pass") {  ※↓下記のjavascriptの部分をphpで再現したい echo ' <script language="javascript"> window.location.replace("test.php"); </script>'; } どなたかご教授のほどお願いいたします

    • 締切済み
    • PHP
  • JavaScriptでページを一度だけリロード

    とあるページにアクセスした際、JavaScript(jQuery)を使って一度だけページをリロードしたいと思っております。 <script language="JavaScript"><!-- function reload() { if (window.name != "test") { location.reload(); window.name = "test"; } } // --></script> 上記のような記述で試みたのですが、リロードしてくれません。 他に対応できる方法がございましたら、ご教授いただけますと幸いです。 以上、よろしくお願い致します。

  • javascriptの動作について

    こんばんは。 直接アドレス指定などしてきたものについては、 トップページへ飛ばすことをしようと思ったのですが、 以下の記述だと、IE8では動作しましたが、GoogleCrome(11.0.696.77)、firefox(3.6.0)、safari では動作しませんでした。(location.hrefがダメなんでしょうか?) 解決策・回避策などあれば教えてください。 よろしくお願いします。 <script language="JavaScript" type="text/JavaScript"> <!-- var url; url = document.referrer; if(url != 'http://xxxxxxxxx'/){ location.href('http://xxxxxxxxxxxxx'); } // --> </script>

  • JavaScript でのリアルタイム時刻表示

    17時間の時差があるアメリカの時刻をリアルタイムに表示したいのですが数箇所おかしな点があり、困っています。 17時間遅れているアメリカの時間を表示しようとしたのですが、17時間遅れているということから -17 しています。 hour の取得時に -17 としてみたのですが、おかしな表示になってしまい、正常に表示されません。 日本時間: 2008/02/13 02:14:55 アメリカ時間: 2008/02/13 0-15:14:55 というように表示されてしまいます。 本来なら17時間遅れているアメリカの時間は、 2008/02/12 09:14:55 と表示されなければいけないのですが、 どうすれば改善されますか? また日付の取得が10ずれてるのですが、 これも改善したいです。 単純に+10してしまうと、22日以降の表示がおかしくなると思うのでなんらかの対処が必要と思いますが、対処方法が分かりません。 以下にスクリプトを記しますので、ご教授よろしくお願い致します。 <script language="JavaScript"> <!-- function ClockU(){ time = new Date(); YearU = time.getFullYear(); MonthU = time.getMonth()+1; DayU = time.getDay(); HourU = time.getHours()-17; MinuteU = time.getMinutes(); SecondU = time.getSeconds(); if(MonthU<10){MonthU='0'+MonthU;} if(DayU<10){DayU='0'+DayU;} if(HourU<10){HourU='0'+HourU;} if(MinuteU<10){MinuteU='0'+MinuteU;} if(SecondU<10){SecondU='0'+SecondU;} document.getElementById('ClockU').innerHTML = YearU+'/'+MonthU+'/'+DayU+' '+HourU+':'+MinuteU+':'+SecondU; setTimeout('ClockU()',100); } setTimeout('ClockU()'); // --> </script>

  • ページの?以降のパラメータの表示をしたい。Javascript での location.search を Vbscript でするには?

    AAAA.html?kbn=1&tenki=hare みたいなページの?以降の部分を <SCRIPT Language="JavaScript"> <!-- document.write(location.search); // --> </SCRIPT> で書くことができるのですが、 これをVBscriptで実現したいです。 どなたかわかりませんか?

    • ベストアンサー
    • HTML
  • ページが数秒たってもジャンプしません。

    いま、私的ホームページを作っています。 最初のページのロードが終わったら7秒後に次のページにジャンプするようにジャバスクリプトを使ってかいたのですが、うまくいきません。 どこが間違っているのかわからないので、どなたかご指摘下さい。(そのまんまコピペします) まず、元ページの<head>タグの間に、 <script language="JavaScript" type="text/JavaScript"> <!-- function jump(){location.href="リンク先のURL";} //--> </script> を挿入しそして、<body>タグのなかに、 <body onLoad="settimeout('jump()',7000)"> と入れました。 何が間違っているのでしょうか? 助けてください!おねがいします。 リンク先のURLは間違い無いです。 ちなみにdreamweaverMXをつかって制作しています。

  • サイトのリロード間隔を選択できるようにしたいのですが?

    java初心者です。 以下の記述でページ全体を一定間隔にてリロードを繰り返させています。★★★★★の部分がリロード間隔となりますが、その部分を1分、5分、リロード無し、といったようにボタンで選べるようにしたいのですが、何か方法はありますでしょうか?よろしくお願いしますm<_ _>m <script type="text/javascript" language="javascript"> setTimeout("location.reload(true)",★★★★★); </script>

専門家に質問してみよう