• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:時間の計算について)

時間の計算について

このQ&Aのポイント
  • ゲームのボスモンスターの湧く時間を表で表示する方法を教えてください。
  • 選択された回数分の時間を曜日+時間で表示したいです。
  • HTMLファイルを作成し、JSを追加する必要があります。

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

  • ベストアンサー
  • yyr446
  • ベストアンサー率65% (870/1330)
回答No.6

=>更に項目を追加する場合はどの部分をいじったらよいのでしょうか? まず<table>の中の <tr bgcolor="skyblue"><td align="center" rowspan="13" name="jikan">5時間38分</td><td>旧レッドアイ研究所B3</td><td> 研究所長</td><td>Lv55</td><td rowspan="13"><FORM name="TxtArea"><textarea rows="20" name="MyText1"></textarea></FORM></td></tr> が湧き時間と表示用のテキストエリアがある<tr>要素です。 この<tr>を湧き時間毎(5時間38分、7時間38分、..)に書きます。 (その下に場所名、ボス名、ボスのLvのみの<tr>要素が続きます。) javascriptのfunction myCalc()の中身を間単に説明すると、 まず、目的の<tr>内にある<FORM name="TxtArea">要素を var targets = document.getElementsByName("TxtArea"); で全部取得します。targets.lengthは<FORM name="TxtArea">の個数の取得です。 そして、おのおのの<FORM name="TxtArea">の親の<tr>要素を var records = targets[i].parentNode.parentNode; で取得しています。records.childNodes.lengthはその<tr>の中の<td>の個数の取得です。 さらに、その<tr>要素の中の<td>要素の中でname="jikan"を持つ<td>を records.childNodes[j].getAttribute("name")=="jikan" で探します。records.childNodes[j]がその<td>となります。 <td>の中身はrecords.childNodes[j].innerHTMLで取得します。 var instr = toHankakuNum(records.childNodes[j].innerHTML); は全角数字を半角数字に変換します。 次に時間を分に変換します。 var instrs = instr.split("時間"); if (instrs[1]){ .... } 以降は沸き時間の計算ロジックになります。 計算した後、 targets[i].childNodes[0].value += youbi[out_youbi] + out_jikan + "時" + out_min + "分" + "\n"; でテキストエリアに追記しています。 targets[i]というのは<FORM name="TxtArea">要素でしたから、<textare>要素は一つ目の子供targets[i].childNodes[0]です。その値を targets[i].childNodes[0].value += で追記しています。 それだけの事です。 とりあえず、変更したサンプルを提示します。前のサンプルと比較してみてください。 ※投稿で行頭半角スペースがカットされるためみにくいですが) (変更サンプル) <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html lang="ja-JP"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <meta http-equiv="Content-Script-Type" content="text/javascript"> <meta http-equiv="Content-Style-Type" content="text/css"> <title>wakijikan</title> <script type="text/javascript" charset="utf-8"> <!-- function toHankakuNum(motoText) { var han = "0123456789.,-+"; var zen = "0123456789.,-+"; var str = ""; for (var i=0; i<motoText.length; i++) { var c = motoText.charAt(i); var n = zen.indexOf(c,0); if (n>= 0) c = han.charAt(n); str += c; } return str; } function myCalc(obj){ var targets = document.getElementsByName("TxtArea"); for(var i=0;i<targets.length;i++){ var records = targets[i].parentNode.parentNode; for(var j=0;j<records.childNodes.length;j++){ if(records.childNodes[j].getAttribute("name")=="jikan"){ var instr = toHankakuNum(records.childNodes[j].innerHTML); var instrs = instr.split("時間"); if (instrs[1]){ x = parseInt(instrs[0]) * 60 + parseInt(instrs[1].replace("分","")); }else{ if(instrs[0].indexOf("分") == -1){ x = parseInt(instrs[0]) * 60; }else{ x = parseInt(instrs[0].replace("分","")); } } } } var youbi= new Array("日曜","月曜","火曜","水曜","木曜","金曜","土曜"); var in_youbi = parseInt(obj.select1.value); var kaisu = parseInt(obj.cnt.value); in_jikan = parseInt(obj.hour.value); in_min = parseInt(obj.min.value); in_time_min = in_jikan * 60 + in_min; in_rest_min = 24 * 60 - in_time_min; targets[i].childNodes[0].value =""; for(var k=0;k<kaisu;k++){ var keika_min = x + x * k; if (keika_min < in_rest_min){ day_count = 0; out_time_min = in_time_min + keika_min; }else{ day_count = Math.floor((keika_min - in_rest_min) / (24 * 60)) + 1; out_time_min = (keika_min - in_rest_min) % (24 * 60); } out_jikan = Math.floor(out_time_min / 60); out_min = out_time_min % 60; var out_youbi = in_youbi + (day_count % 7); if (out_youbi > 6){ out_youbi = out_youbi - 7;} targets[i].childNodes[0].value += youbi[out_youbi] + out_jikan + "時" + out_min + "分" + "\n"; } } } // --> </script> </head> <body> <table align="center"> <tr align="center"> <td> <font size="+2">ボスの湧き時間計算機</FONT> </td> </tr> <tr align="center"><td> <form name="myForm"> 最後に倒した時間(メンテ終了時間) <SELECT NAME="select1" SIZE=1> <OPTION VALUE=0>日 <OPTION VALUE=1>月 <OPTION VALUE=2>火 <OPTION VALUE=3>水 <OPTION VALUE=4>木 <OPTION VALUE=5>金 <OPTION VALUE=6>土 </SELECT> <input type="var" size="2" name="hour">時<input type="var" size="2" name="min">分</td></tr> <tr align="left"><td> 表示する回数<input type="var" size="5" name="cnt"> <input type="button" value="計算する" onclick="myCalc(this.form)"> </form></td></tr> <table border="1" align="center"> <tr align="center"><td>湧き時間</td><td>場所</td><td>ボス</td><td>ボスのLv</td><td>湧き時間</td></tr> <tr bgcolor="skyblue"><td align="center" rowspan="13" name="jikan">5時間38分</td><td>旧レッドアイ研究所B3</td><td> 研究所長</td><td>Lv55</td><td rowspan="13"><FORM name="TxtArea"><textarea rows="20" name="MyText1"></textarea></FORM></td></tr> <tr bgcolor="skyblue"><td>オート地下監獄B3</td><td>オート警備隊長</td><td>Lv60</td></tr> <tr bgcolor="skyblue"><td>バヘル台地 / エルベルグ山脈西部地域</td><td>原始人族長</td><td>Lv64</td></tr> <tr bgcolor="skyblue"><td>ハノブ南側望楼2F</td><td>望楼のオーガ</td><td>Lv65</td></tr> <tr bgcolor="skyblue"><td>ルリリバー/川河口</td><td>ドラゴンタート</td><td>Lv75</td></tr> <tr bgcolor="skyblue"><td>兵営B1(廃墟スバイン要塞)</td><td>食人鬼</td><td>Lv75</td></tr> <tr bgcolor="skyblue"><td>テンドペンド平原/トワイライト滝付近</td><td>マウントオーガ</td><td>Lv80</td></tr> <tr bgcolor="skyblue"><td>オーガの王窟B1</td><td>オーガ帝王</td><td>Lv80</td></tr> <tr bgcolor="skyblue"><td>キャンサー気孔B3</td><td>ナーガミンチ</td><td>Lv85</td></tr> <tr bgcolor="skyblue"><td>警備兵墓B1</td><td>墓の主</td><td>Lv85</td></tr> <tr bgcolor="skyblue"><td>廃墟スバイン要塞</td><td>廃墟の魔法師</td><td>Lv95</td></tr> <tr bgcolor="skyblue"><td>麻薬巣窟B2</td><td>動力鎧</td><td>Lv100</td></tr> <tr bgcolor="skyblue"><td>シーフギルドの倉庫[B]B2</td><td>女王蜘蛛</td><td>Lv105</td></tr> <tr bgcolor="litegreen"><td align="center" rowspan="9" name="jikan">7時間38分</td><td>傭兵達の大きな墓B2</td><td>ミイラ王</td><td>Lv120</td><td rowspan="9"><FORM name="TxtArea"><textarea rows="15" name="MyText2"></textarea></FORM></td></tr> <tr bgcolor="litegreen"><td>スマグ地下道B3</td><td>重武装騎士</td><td>Lv130</td></tr> <tr bgcolor="litegreen"><td>トワイライト滝B5</td><td>地獄蜘蛛</td><td>Lv145</td></tr> <tr bgcolor="litegreen"><td>シーフギルドの倉庫[C]B3</td><td>闇の追跡者</td><td>Lv160</td></tr> <tr bgcolor="litegreen"><td>河口ダンジョン'ド'B3</td><td>不死の死骸</td><td>Lv175</td></tr> <tr bgcolor="litegreen"><td>河口ダンジョン'レ'B2</td><td>ナーガの勇者</td><td>Lv180</td></tr> <tr bgcolor="litegreen"><td>河口ダンジョン'ミ'B1</td><td>深海イカ</td><td>Lv185</td></tr> <tr bgcolor="litegreen"><td>ソルティケーブB4</td><td>洞窟の猛獣</td><td>Lv190</td></tr> <tr bgcolor="litegreen"><td>河口ダンジョン'ラ'B2</td><td>海の神獣</td><td>Lv200</td></tr> </table> </body> </html>

ryupyon
質問者

お礼

ありがとうございます。 早速テスト動作したところ正常に動作いたしました。 1つずつ計算式を書かないとダメなのかと悩んでいたのでとても助かりました。 また何かありましたら是非よろしくお願いいたします。

その他の回答 (5)

  • yyr446
  • ベストアンサー率65% (870/1330)
回答No.5

度々どうも、無理にdateオブジェクトを使おうとしたので混乱しました。 自分で経過日数、経過時間を計算すればよかった。 と、いうことで完成サンプルです。 (サンプル) <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html lang="ja-JP"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <meta http-equiv="Content-Script-Type" content="text/javascript"> <meta http-equiv="Content-Style-Type" content="text/css"> <title>wakijikan</title> <script type="text/javascript" charset="utf-8"> <!-- function myCalc(obj){ var targets = document.getElementsByName("TxtArea"); for(i=0;i<targets.length;i++){ var records = targets[i].parentNode.parentNode; for(j=0;j<records.childNodes.length;j++){ if(records.childNodes[j].getAttribute("name")=="jikan"){ x = parseInt(records.childNodes[j].innerHTML.replace("分","")); } } var youbi= new Array("日曜","月曜","火曜","水曜","木曜","金曜","土曜"); var in_youbi = parseInt(obj.select1.value); var kaisu = parseInt(obj.cnt.value); in_jikan = parseInt(obj.hour.value); in_min = parseInt(obj.min.value); in_time_min = in_jikan * 60 + in_min; in_rest_min = 24 * 60 - in_time_min; targets[i].childNodes[0].value =""; for(k=0;k<kaisu;k++){ var keika_min = x + x * k; if (keika_min < in_rest_min){ day_count = 0; out_time_min = in_time_min + keika_min; }else{ day_count = Math.floor((keika_min - in_rest_min) / (24 * 60)) + 1; out_time_min = (keika_min - in_rest_min) % (24 * 60); } out_jikan = Math.floor(out_time_min / 60); out_min = out_time_min % 60; var out_youbi = in_youbi + (day_count % 7); if (out_youbi > 6){ out_youbi = out_youbi - 7;} targets[i].childNodes[0].value += youbi[out_youbi] + out_jikan + "時" + out_min + "分" + "\n"; } } } // --> </script> </head> <body> <table align="center"> <tr align="center"> <td> <font size="+2">ボスの湧き時間計算機</FONT> </td> </tr> <tr align="center"><td> <form name="myForm"> 最後に倒した時間(メンテ終了時間) <SELECT NAME="select1" SIZE=1> <OPTION VALUE=0>日 <OPTION VALUE=1>月 <OPTION VALUE=2>火 <OPTION VALUE=3>水 <OPTION VALUE=4>木 <OPTION VALUE=5>金 <OPTION VALUE=6>土 </SELECT> <input type="var" size="2" name="hour">時<input type="var" size="2" name="min">分</td></tr> <tr align="left"><td> 表示する回数<input type="var" size="5" name="cnt"> <input type="button" value="計算する" onclick="myCalc(this.form)"> </form></td></tr> <table border="1" align="center"> <tr align="center"><td>湧き時間</td><td>場所</td><td>ボス</td><td>ボスのLv</td><td>湧き時間< /td></tr> <tr bgcolor="skyblue"><td align="center" rowspan="13" name="jikan">50分</td><td>旧レッドアイ研究所B3</td><td> 研究所長</td><td>Lv55</td><td rowspan="13"><FORM name="TxtArea"><textarea rows="20" name="MyText1"></textarea></FORM></td></tr> <tr bgcolor="skyblue"><td>オート地下監獄B3</td><td>オート警備隊長</td><td>Lv60</td></tr> <tr bgcolor="skyblue"><td>バヘル台地 / エルベルグ山脈西部地域</td><td>原始人族長</td><td>Lv64< /td></tr> <tr bgcolor="skyblue"><td>ハノブ南側望楼2F</td><td>望楼のオーガ</td><td>Lv65</td></tr> <tr bgcolor="skyblue"><td>ルリリバー/川河口</td><td>ドラゴンタート</td><td>Lv75</td></tr> <tr bgcolor="skyblue"><td>兵営B1(廃墟スバイン要塞)</td><td>食人鬼</td><td>Lv75</td></tr> <tr bgcolor="skyblue"><td>テンドペンド平原/トワイライト滝付近</td><td>マウントオーガ</td><td>Lv80</td></tr> <tr bgcolor="skyblue"><td>オーガの王窟B1</td><td>オーガ帝王</td><td>Lv80</td></tr> <tr bgcolor="skyblue"><td>キャンサー気孔B3</td><td>ナーガミンチ</td><td>Lv85</td></tr> <tr bgcolor="skyblue"><td>警備兵墓B1</td><td>墓の主</td><td>Lv85</td></tr> <tr bgcolor="skyblue"><td>廃墟スバイン要塞</td><td>廃墟の魔法師</td><td>Lv95</td></tr> <tr bgcolor="skyblue"><td>麻薬巣窟B2</td><td>動力鎧</td><td>Lv100</td></tr> <tr bgcolor="skyblue"><td>シーフギルドの倉庫[B]B2</td><td>女王蜘蛛</td><td>Lv105</td></tr> <tr bgcolor="litegreen"><td align="center" rowspan="9" name="jikan">60分</td><td>傭兵達の大きな墓B2</td><td>ミイラ王</td><td>Lv120</td><td rowspan="9"><FORM name="TxtArea"><textarea rows="15" name="MyText2"></textarea></FORM></td></tr> <tr bgcolor="litegreen"><td>スマグ地下道B3</td><td>重武装騎士</td><td>Lv130</td></tr> <tr bgcolor="litegreen"><td>トワイライト滝B5</td><td>地獄蜘蛛</td><td>Lv145</td></tr> <tr bgcolor="litegreen"><td>シーフギルドの倉庫[C]B3</td><td>闇の追跡者</td><td>Lv160</td></tr> <tr bgcolor="litegreen"><td>河口ダンジョン'ド'B3</td><td>不死の死骸</td><td>Lv175</td></tr> <tr bgcolor="litegreen"><td>河口ダンジョン'レ'B2</td><td>ナーガの勇者</td><td>Lv180</td></tr> <tr bgcolor="litegreen"><td>河口ダンジョン'ミ'B1</td><td>深海イカ</td><td>Lv185</td></tr> <tr bgcolor="litegreen"><td>ソルティケーブB4</td><td>洞窟の猛獣</td><td>Lv190</td></tr> <tr bgcolor="litegreen"><td>河口ダンジョン'ラ'B2</td><td>海の神獣</td><td>Lv200</td></tr> </table> </body> </html>

ryupyon
質問者

お礼

ありがとうございます。 えっと、更に項目を追加する場合はどの部分をいじったらよいのでしょうか? サンプル以降に 5時間38分、7時間38分、9時間38分、10時間38分、11時間45分、12時間50分、8時間42分20秒、3時間4分12秒 を追加したいのですが、複雑なので私には理解に苦しみます。 よろしくお願いします。

  • yyr446
  • ベストアンサー率65% (870/1330)
回答No.4

時間の経過のみで曜日をハンドリングするのは思ったよりたいへんですね。 申し訳ありませんが、ギブアップします。 一応、動くサンプルを提供しますが、メンテナンス時間より24時間以上後の時間にならないと、24時を超えても曜日が変わりません。 ※そのままコピペして、試してやって下さい。 (サンプル) <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html lang="ja-JP"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <meta http-equiv="Content-Script-Type" content="text/javascript"> <meta http-equiv="Content-Style-Type" content="text/css"> <title>wakijikan</title> <script type="text/javascript" charset="utf-8"> <!-- function myCalc(obj){ var targets = document.getElementsByName("TxtArea"); for(i=0;i<targets.length;i++){ var records = targets[i].parentNode.parentNode; for(j=0;j<records.childNodes.length;j++){ if(records.childNodes[j].getAttribute("name")=="jikan"){ x = parseInt(records.childNodes[j].innerHTML.replace("分","")); } } var youbi= new Array("日曜","月曜","火曜","水曜","木曜","金曜","土曜"); var in_youbi = parseInt(obj.select1.value); var kaisu = parseInt(obj.cnt.value); var in_datetime = new Date(); var out_datetime = new Date(); in_datetime.setHours(parseInt(obj.hour.value)); in_datetime.setMinutes(parseInt(obj.min.value)); in_datetime.setSeconds(0); targets[i].childNodes[0].value =""; for(k=0;k<kaisu;k++){ var sec = x + x * k; out_datetime.setTime(in_datetime.getTime() + sec * 60 * 1000 ); var target_hh = out_datetime.getHours(); var target_mm = out_datetime.getMinutes(); var day_count = Math.floor((out_datetime.getTime() - in_datetime.getTime())/(1000*24*60*60)); var out_youbi = in_youbi + (day_count % 7); if (out_youbi > 6){ out_youbi = out_youbi - 7;} targets[i].childNodes[0].value += youbi[out_youbi] + target_hh + "時" + target_mm + "分" + "\n"; } } } // --> </script> </head> <body> <table align="center"> <tr align="center"> <td> <font size="+2">ボスの湧き時間計算機</FONT> </td> </tr> <tr align="center"><td> <form name="myForm"> 最後に倒した時間(メンテ終了時間) <SELECT NAME="select1" SIZE=1> <OPTION VALUE=0>日 <OPTION VALUE=1>月 <OPTION VALUE=2>火 <OPTION VALUE=3>水 <OPTION VALUE=4>木 <OPTION VALUE=5>金 <OPTION VALUE=6>土 </SELECT> <input type="var" size="2" name="hour">時<input type="var" size="2" name="min">分</td></tr> <tr align="left"><td> 表示する回数<input type="var" size="5" name="cnt"> <input type="button" value="計算する" onclick="myCalc(this.form)"> </form></td></tr> <table border="1" align="center"> <tr align="center"><td>湧き時間</td><td>場所</td><td>ボス</td><td>ボスのLv</td><td>湧き時間< /td></tr> <tr bgcolor="skyblue"><td align="center" rowspan="13" name="jikan">50分</td><td>旧レッドアイ研究所B3</td><td> 研究所長</td><td>Lv55</td><td rowspan="13"><FORM name="TxtArea"><textarea rows="20" name="MyText1"></textarea></FORM></td></tr> <tr bgcolor="skyblue"><td>オート地下監獄B3</td><td>オート警備隊長</td><td>Lv60</td></tr> <tr bgcolor="skyblue"><td>バヘル台地 / エルベルグ山脈西部地域</td><td>原始人族長</td><td>Lv64< /td></tr> <tr bgcolor="skyblue"><td>ハノブ南側望楼2F</td><td>望楼のオーガ</td><td>Lv65</td></tr> <tr bgcolor="skyblue"><td>ルリリバー/川河口</td><td>ドラゴンタート</td><td>Lv75</td></tr> <tr bgcolor="skyblue"><td>兵営B1(廃墟スバイン要塞)</td><td>食人鬼</td><td>Lv75</td></tr> <tr bgcolor="skyblue"><td>テンドペンド平原/トワイライト滝付近</td><td>マウントオーガ</td><td>Lv80</td></tr> <tr bgcolor="skyblue"><td>オーガの王窟B1</td><td>オーガ帝王</td><td>Lv80</td></tr> <tr bgcolor="skyblue"><td>キャンサー気孔B3</td><td>ナーガミンチ</td><td>Lv85</td></tr> <tr bgcolor="skyblue"><td>警備兵墓B1</td><td>墓の主</td><td>Lv85</td></tr> <tr bgcolor="skyblue"><td>廃墟スバイン要塞</td><td>廃墟の魔法師</td><td>Lv95</td></tr> <tr bgcolor="skyblue"><td>麻薬巣窟B2</td><td>動力鎧</td><td>Lv100</td></tr> <tr bgcolor="skyblue"><td>シーフギルドの倉庫[B]B2</td><td>女王蜘蛛</td><td>Lv105</td></tr> <tr bgcolor="litegreen"><td align="center" rowspan="9" name="jikan">60分</td><td>傭兵達の大きな墓B2</td><td>ミイラ王</td><td>Lv120</td><td rowspan="9"><FORM name="TxtArea"><textarea rows="15" name="MyText2"></textarea></FORM></td></tr> <tr bgcolor="litegreen"><td>スマグ地下道B3</td><td>重武装騎士</td><td>Lv130</td></tr> <tr bgcolor="litegreen"><td>トワイライト滝B5</td><td>地獄蜘蛛</td><td>Lv145</td></tr> <tr bgcolor="litegreen"><td>シーフギルドの倉庫[C]B3</td><td>闇の追跡者</td><td>Lv160</td></tr> <tr bgcolor="litegreen"><td>河口ダンジョン'ド'B3</td><td>不死の死骸</td><td>Lv175</td></tr> <tr bgcolor="litegreen"><td>河口ダンジョン'レ'B2</td><td>ナーガの勇者</td><td>Lv180</td></tr> <tr bgcolor="litegreen"><td>河口ダンジョン'ミ'B1</td><td>深海イカ</td><td>Lv185</td></tr> <tr bgcolor="litegreen"><td>ソルティケーブB4</td><td>洞窟の猛獣</td><td>Lv190</td></tr> <tr bgcolor="litegreen"><td>河口ダンジョン'ラ'B2</td><td>海の神獣</td><td>Lv200</td></tr> </table> </body> </html>

ryupyon
質問者

お礼

ありがとうございます 参考にして見ます。

  • yyr446
  • ベストアンサー率65% (870/1330)
回答No.3

No1,No2です。整理してみました。 <input type="button" value="計算する" onclick="myCalc(this)"> の入力に対して、時間の計算は function myCalc(obj){ var x = 50; // <=沸き時間(50分) var youbi= = new Array("日曜", "月曜", "火曜" ..... ); var in_datetime = new Date(); var out_datetime = new Date(); in_datetime.setHours(parseInt(obj.hour.value)); in_datetime.setMinutes(parseInt(obj.min.value)); in_datetime.setSeconds(0); out_datetime.setTime(in_datetime.getTime() + x * 60 * 1000 ); var target_hh = out_datetime.getHours(); var target_mm = out_datetime.getMinutes(); var day_count = Math.floor((out_datetime.getTime() - in_datetime.getTime())/(1000*24*60*60)); if (out_youbi > 6){ out_youbi = out_youbi -7;} alert youbi[out_youbi] + "target_hh" + "時" + target_mm + "分"; // 仮に表示しているだけ。 } のロジックですっきりします。 このままのHTMLでは、テーブルから沸き時間を取得して、結果をセットする部分が面倒そうです。それぞれの<textarea>要素の親を取得していって沸き時間の<td>要素を探さなければならないからです。あるいは、沸き時間の<td>要素にname属性でname="jikan"とか設定しておいて、 var targets = document.getElementsByName("jikan"); で全部配列に取り込んで、それぞれの<td name="jikan">要素の甥にあたる<textarea>要素の値に書き込んであげればよろしいかと?

  • yyr446
  • ベストアンサー率65% (870/1330)
回答No.2

希望されている事がなんとなく解りました。 入力された曜日と時間(時、分)からn分後の曜日と時間を求めたいのですね。年月日が不定だから単純にdate関数を使えないけれども、そもそも曜日の繰り返しは年月日に無関係だから基準日を適当に選んでそこから計算するというのはいかがでしょうか。例えば2009年6月1日は月曜だから、 var youbi= = new Array("日曜", "月曜", "火曜" ..... ); var datetime = new Date(2009, 6, 1, 0, 0, 0); var kijyun_msec = datetime.getTime() //1970年1月1日午前0時0分0秒000からの経過ミリ秒 としておきます、メンテナンス終了に木曜日の14時00分が入力されたとしてin_hh = 14とin_MM=00とin_youbi=4をセットした上でX分後の時、分は var target_msec = kijyun_msec + (in_hh * 60 + in_MM + x) * 60 * 1000 ; //X分後の1970年1月1日午前0時0分0秒000からの経過ミリ秒 datetime.setTime(target_msec); target_hh = datetime.getHours(); target_mm = datetime.getMinutes(); で取得します。曜日のほうは経過日数を求めて、 day_count = Math.floor((target_msec - kijyun_msec) / (1000*60*60*24)); out_youbi = in_youbi + day_count % 7; if (out_youbi > 6){ out_youbi = out_youbi -7;} alert youbi[out_youbi] + "target_hh" + "時" + target_mm + "分"; ですかね。 dateオブジェクトを調べれば、もっと間単にできるかも...

  • yyr446
  • ベストアンサー率65% (870/1330)
回答No.1

質問のタイトルが「時間の計算」ですが、何を計算するのか全く分かりません。 曜日と時間と回数を入力させて、1行目以下のTR要素の最後のTD要素内に <FORM name="TxtArea"><textarea rows="20" name="MyText1"></textarea></FORM> を生成して(何故FORMなのか?)そのtextareaの中身を、 日曜 15時30分 日曜 15時30分 日曜 15時30分   -----  回数分同じデータを表示 ----- とセットしたいとの意味合いですか? どのボスの行かは、どのように選択するつもりですか?

ryupyon
質問者

補足

説明が下手ですいません。 最初の選択と入力してもらう項目はメンテナンス終了時刻を入力して 各テキストエリアに次に湧く時刻と曜日を表示したいんです。 例えばメンテナンス終了が木曜日の14:00だとすると 一番上のテキストエリアには50分沸きなので (木)14:50 (木)15:40      ・      ・      ・      ・ と言った感じに表示したいのです。 それを全テキストエリアに表示できるようにしたいんです。 これでも説明不足でわからない場所がありましたら指摘していただけると幸いです。     

関連するQ&A