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

JavaScriptで期間を計算する方法

このQ&Aのポイント
  • JavaScriptを使用して、複数の期間を入力し、その合計を表示する方法について教えてください。
  • 期間1から期間3までの西暦と月を入力し、合計年数とヶ月を表示する方法について教えてください。JavaScriptを使用して実現できる方法を教えてください。
  • JavaScriptのコードを使って、複数の期間を合計する方法を教えてください。期間1から期間3までの西暦と月を入力し、合計年数とヶ月を表示させる方法を知りたいです。

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

  • ベストアンサー
  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.1

よくわからないけど… そのまま計算するのでは、まずいのかしら? とりあえず、プリミティブな計算例 (入力値のチェックは適当なので、そっくり入替えてください) <html> <script type="text/javascript"> function hoge() { var d=[]; for (var i=1;i<5; i++){ var v=document.getElementById('kikan01_0'+i).value; d[i-1]=(isNaN(v))?1:parseInt(v); if (i%2==0) d[i-1] = (d[i-1]-1)%12 + 1; } var nen=d[2]-d[0]; var tuki=d[3]-d[1]; if (tuki<0) {nen--; tuki+=12;} document.getElementById('nensuu').value=nen; document.getElementById('kagetsu').value=tuki; } </script> <body> 期間1:<br /> 西暦 <input name="kikan01_01" type="text" id="kikan01_01" />年 <input name="kikan01_02" type="text" id="kikan01_02" />月 ~ 西暦 <input name="kikan01_03" type="text" id="kikan01_03" />年 <input name="kikan01_04" type="text" id="kikan01_04" />月 <p /> <button onclick="hoge()">計 算</button><br /> 合計年数 <input name="nensuu" type="text" id="nensuu" />年 <input name="kagetsu" type="text" id="kagetsu" />ヶ月 </body> </html> 意味が違ってたら失礼。

noname#258989
質問者

補足

ありがとうございます。下記のように意図していたことができました。 ・表示例 期間1に「2000年」「1月」~「2000年」「5月」と入力 ↓ 「計算」を押す ↓ 合計年数に「0年」「4ヶ月」と表示。 ですが、更に例えば 期間2に「1997年」「1月」~「2000年」「5月」と入力 ↓ 「計算」押す ↓ 合計年数に期間1と合わせて、「3年」「8ヶ月」と表示 このようなことも可能でしょうか?知識不足で度々申し訳ないのですが、よろしくお願いいたします。

その他の回答 (1)

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.2

No1です。 >このようなことも可能でしょうか? 当然可能です。 構成が同じなら、同様の要領でできます。(←当たり前ですが…) 沢山ある場合は、それぞれのセットに識別子(=idまたはthis)を設定しておいて、これを引数にして一つのfunction内で処理するようにしてしまった方が効率的ですね。 なお、年月の計算は、最初に 「年×12+月」のように月換算した一つの変数にしておいて月単位で計算し、最後に Math.floor() や %12 で年と月に戻してやるのが普通の考え方かも。

noname#258989
質問者

お礼

なんとか解決できました。ありがとうございました。

noname#258989
質問者

補足

いろいろ試したのですが、どうもうまくいきません。 期間2のinputにid="kikan01_05"、kikan01_06…と連番をふるだけではダメですよね?? 欲を言いますと、管理上、期間2はkikan02_01…、期間3はkikan03_01…としたいのですが。 サンプルを書いていただけると助かります。

関連するQ&A