• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:JavaScript 日数計算の関数で演算誤差。対処方法は?)

JavaScript 日数計算の関数で演算誤差。対処方法は?

このQ&Aのポイント
  • JavaScriptの日数計算関数において、引数によって誤差が生じる問題があります。
  • 月の跨ぎ方によって発生する演算誤差の解決策や回避手段について、具体的な関数や参考ページがありますが、問題を完全に解消する方法はまだ見つかっていません。
  • JavaScriptの浮動小数点数の演算誤差が原因である可能性があり、他の関数を試してみても問題が解決しない場合は、根本的な解決策を見つけるために専門家の助言を仰ぐことをおすすめします。

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

  • ベストアンサー
  • leaz024
  • ベストアンサー率75% (398/526)
回答No.1

new Date(YEAR, MONTH, DAY) という形式で Dateオブジェクトを生成する時は、MONTH は実際の月から1を引いた値を指定する必要があります。 後はもうお分かりですね?

参考URL:
http://tohoho.wakusei.ne.jp/js/date.htm#newDate
noname#7749
質問者

お礼

コメントありがとうございます。 ご指摘の通りでした。 配列の添え字と常に要素数を混同する (多くのプログラミング言語では添え字はゼロから始まるので、1少なくなる) という、ありがちなミスですね。 サンプルコードを見た時点で -1 の意味を見抜けなかったのが敗因です。 お粗末様でした。 診立てが見当違いだったために明後日の方向を調べて時間を浪費してしまいました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • javascriptの関数につきまして

    javascriptの関数につきまして javascriptの関数につきましての質問です。 function sample{ ・・・・・・・・ ・・・・・・・・ cary[0] = obj.s_year.options[sindex1].text; cary[1] = obj.s_month.options[sindex2].text; cary[2] = obj.s_date.options[sindex3].text; cary[3] = document.forms[0].yasumiF.value; ex=new Date(); ex.setTime(ex.getTime()+1000*60*60*24*1); ckstr = escape(cary[0]); i = 1; while (cary[i]){ ckstr += "%00" + escape(cary[i]); i++; } } ・・・・・・・・ ・・・・・・・・ } という関数内の処理で、ckstr = escape(cary[0]);とckstrに代入 したあと、while文でループさせていますが、これはどのような処理をしているのでしょうか? また、exも何にも代入していないので、この関数内で役に立たない気がしたのですが・・。 ※cary[0] にはセレクトボックス内で選択した年月の値が入っています。 この関数の処理内容が分かる方がいらっしゃいましたらご指導お願い致します。

  • 関数の引数として配列を渡す方法

    初めて質問させていただきます。 現在下記のように関数に配列の引数を渡して、配列の個数を表示しているのですが、必ず0件になってしまいます。 <html> <head> <title>連続して関数を呼び出す</title> <script language="JavaScript"> <!-- function aaa (est) { alert(est.length); return; } // --> </script> </head> <body> <script language="JavaScript"> <!-- var hai = new Array(); hai["a"] = true; hai["b"] = false; aaa(hai); // --> </script> </body> </html> もしかしたら、受け渡し方が悪いのかもしれないのですが、色々調べても分からなかったので質問させていただきました。 argumentsというものを使うのかもしれませんがうまくいきませんでした。 分かる方がいらっしゃいましたら、ご教授ください。

  • javascriptでの大文字小文字の区別

    前に質問をし、大文字と小文字の区別があることはわかりました。そこで、日にちを出すために <script language="javascript"> <!-- mydate=new Date(); ye=mydate.getFullYear()+"年"; mo=mydate.getMonth()+1+"月"; da=mydate.getDate()+"日"; day=mydate.getDay(); day2=new Array(7); day2[0]="日";day2[1]="月";day2[2]="火"; day2[3]="水";day2[4]="木";day2[5]="金"; day2[6]="土"; document.write("<font style='font-size : 16px; color : #666666'>"); document.write("本日は"+ye+mo+da+"("+day2[day]+") "); document.write("です</font>"); //--> </script> とすることはわかったのですが、一番初めの<script language="javascript">は物によって<SCRIPT LANGUAGE="JavaScript">や<SCRIPT language="Javascript">となっていたり、年数などのyeはYeとなっていたりします。javascriptにも大文字と小文字を区別しないものがあるということですか。もしそうならどういったものがどちらでもいいのですか。

  • JavaScriptでイベントまでのカウントを作りたい。

    教えてください。JavaScript初心者です。 JavaScriptでイベントまでのカウントを作りたいのですが、 日にちを画像でだして、指定した日がきたら、画像で差し替えるようにしたいのですが、どうすればいいのでしょうか? ※現在は指定した日がきたら、「おめでとう」の文字がでるようにしてます。 書いたタグは下記になります。 アドバイスをお願いします。 <script language="JavaScript"><!-- var now = new Date(); var point = new Date(2009,8-1,25); var countdown = Math.ceil( ( point.getTime() - now.getTime() ) / (1000*60*60*24) ); if(countdown > 0) { document.write('countdown '); } else { document.write('おめでとう!'); } // --></script>

  • このjavascriptコードを短くできませんか?

    javascript初心者です。 どなたか下記のコードを短くしていただけないでしょうか? 変数1~変数12まであるので、それぞれコードを書いたら長くなってしまいました。 このままでもうまく動いてはいるのですが、もし短くできるならしたいなと思いまして。 よろしくお願いいたします。 <script type="text/javascript"> <!-- //基準になる日を設定 inputDay1 = "変数1"; //指定日を変数に var hairetu = inputDay1.split("/"); var nowday = new Date(); //今日の日付 var xday = new Date(hairetu[0],hairetu[1] - 1,hairetu[2]);//基準になる日 var countday1 = Math.ceil((xday.getTime() - nowday.getTime()) / (1000 * 60 * 60 * 24)); inputDay2 = "変数2"; //指定日を変数に var hairetu = inputDay2.split("/"); var nowday = new Date(); //今日の日付 var xday = new Date(hairetu[0],hairetu[1] - 1,hairetu[2]);//基準になる日 var countday2 = Math.ceil((xday.getTime() - nowday.getTime()) / (1000 * 60 * 60 * 24)); inputDay3 = "変数3"; //指定日を変数に var hairetu = inputDay3.split("/"); var nowday = new Date(); //今日の日付 var xday = new Date(hairetu[0],hairetu[1] - 1,hairetu[2]);//基準になる日 var countday3 = Math.ceil((xday.getTime() - nowday.getTime()) / (1000 * 60 * 60 * 24)); inputDay4 = "変数4"; //指定日を変数に var hairetu = inputDay4.split("/"); var nowday = new Date(); //今日の日付 var xday = new Date(hairetu[0],hairetu[1] - 1,hairetu[2]);//基準になる日 var countday4 = Math.ceil((xday.getTime() - nowday.getTime()) / (1000 * 60 * 60 * 24)); inputDay5 = "変数5"; //指定日を変数に var hairetu = inputDay5.split("/"); var nowday = new Date(); //今日の日付 var xday = new Date(hairetu[0],hairetu[1] - 1,hairetu[2]);//基準になる日 var countday5 = Math.ceil((xday.getTime() - nowday.getTime()) / (1000 * 60 * 60 * 24)); inputDay6 = "変数6"; //指定日を変数に var hairetu = inputDay6.split("/"); var nowday = new Date(); //今日の日付 var xday = new Date(hairetu[0],hairetu[1] - 1,hairetu[2]);//基準になる日 var countday6 = Math.ceil((xday.getTime() - nowday.getTime()) / (1000 * 60 * 60 * 24)); inputDay7 = "変数7"; //指定日を変数に var hairetu = inputDay7.split("/"); var nowday = new Date(); //今日の日付 var xday = new Date(hairetu[0],hairetu[1] - 1,hairetu[2]);//基準になる日 var countday7 = Math.ceil((xday.getTime() - nowday.getTime()) / (1000 * 60 * 60 * 24)); inputDay8 = "変数8"; //指定日を変数に var hairetu = inputDay8.split("/"); var nowday = new Date(); //今日の日付 var xday = new Date(hairetu[0],hairetu[1] - 1,hairetu[2]);//基準になる日 var countday8 = Math.ceil((xday.getTime() - nowday.getTime()) / (1000 * 60 * 60 * 24)); inputDay9 = "変数9"; //指定日を変数に var hairetu = inputDay9.split("/"); var nowday = new Date(); //今日の日付 var xday = new Date(hairetu[0],hairetu[1] - 1,hairetu[2]);//基準になる日 var countday9 = Math.ceil((xday.getTime() - nowday.getTime()) / (1000 * 60 * 60 * 24)); inputDay10 = "変数10"; //指定日を変数に var hairetu = inputDay10.split("/"); var nowday = new Date(); //今日の日付 var xday = new Date(hairetu[0],hairetu[1] - 1,hairetu[2]);//基準になる日 var countday10 = Math.ceil((xday.getTime() - nowday.getTime()) / (1000 * 60 * 60 * 24)); inputDay11 = "変数11"; //指定日を変数に var hairetu = inputDay11.split("/"); var nowday = new Date(); //今日の日付 var xday = new Date(hairetu[0],hairetu[1] - 1,hairetu[2]);//基準になる日 var countday11 = Math.ceil((xday.getTime() - nowday.getTime()) / (1000 * 60 * 60 * 24)); inputDay12 = "変数12"; //指定日を変数に var hairetu = inputDay12.split("/"); var nowday = new Date(); //今日の日付 var xday = new Date(hairetu[0],hairetu[1] - 1,hairetu[2]);//基準になる日 var countday12 = Math.ceil((xday.getTime() - nowday.getTime()) / (1000 * 60 * 60 * 24)); if (countday1 < 0)document.write("111"); if (countday2 < 0)document.write("222"); if (countday3 < 0)document.write("333"); if (countday4 < 0)document.write("444"); if (countday5 < 0)document.write("555"); if (countday6 < 0)document.write("666"); if (countday7 < 0)document.write("777"); if (countday8 < 0)document.write("888"); if (countday9 < 0)document.write("999"); if (countday10 < 0)document.write("101010"); if (countday11 < 0)document.write("111111"); if (countday12 < 0)document.write("121212"); --> </script>

  • 【javascript】 年齢計算

    初心者です。 イヌでもわかるjavascript講座(http://www.red.oit-net.jp/tatsuya/java/)より拝借して、年齢計算のプログラムをつくっています。 しかし、これでやると、閏年がない年でも、フツウに計算できてしまいますし、「32日」などでも入力できてしまいます。 これを改造して、正確でない日付を入力できないようにしたいのですが、インターネットなどを調べても、どのようにしたらよいのか、見当もつかず困っております。 お手数ですが、どのようにしたらよいのか、そしてできたら、考え方などもお教えくださいませ。 以下がそのソースです。 <HTML> <HEAD> <TITLE></TITLE> <script language="javascript"> <!-- function myAge(N){ //現在から、誕生日を引き、基準日に足す //つまり、現在から、誕生日の日にち分の時間だけ引く Today = new Date(); myBirth = new Date(1970 , 0 , document.myFormAge.myAgeD.value ); myBirth.setTime(Today.getTime()-myBirth.getTime()); //求めた年月日から基準日を引く myYear = myBirth.getUTCFullYear() - document.myFormAge.myAgeY.value; myMonth = myBirth.getUTCMonth() - (document.myFormAge.myAgeM.value - 1); if(myMonth < 0){ //月がマイナスなので年から繰り下げ myYear --; myMonth += 12; } myDate = myBirth.getUTCDate(); document.myFormAge.Age.value = ""+myYear+""; } //--> </SCRIPT> </HEAD> <BODY> <FORM name="myFormAge"> 生年月日を入力してください。 <br> <br> 年(西暦)<INPUT type="text" size="4" name="myAgeY"> 月<INPUT type="text" size="2" name="myAgeM"> 日<INPUT type="text" size="2" name="myAgeD" onKeyDown="myAge(this.form)"> <br> <br> <br> <br> <br> <INPUT type="text" size="5" name="Age">歳 </FORM> </BODY> </HTML> よろしくご教授くださいませ。

  • javascriptにおける指定日時までのカウントダウン

    いろいろなサイトを見回りながら「指定日までの残り日数と時間を表示する」のをjavascriptで動かしたいのですがリアルタイムに秒が進んでくれません。知識のある方はどうか間違えてる点のご教授お願いします。 <html> <head> <title>指定日までの残り日数と時間を表示する</title> </head> <body> <script language="JavaScript"><!-- function xDay(y,m,d,hh,mm,ss){ today = new Date(); xday = new Date(y,m-1,d,hh,mm,ss); dayMS = (24*60*60*1000,60*60*1000); days = Math.floor((xday.getTime()-today.getTime())/(24*60*60*1000)); hours = Math.floor(((xday.getTime()-today.getTime())%(24*60*60*1000))/(60*60*1000)); minutes = Math.floor((((xday.getTime()-today.getTime())%(24*60*60*1000))/(60*1000))%60); seconds = Math.floor((((xday.getTime()-today.getTime())%(24*60*60*1000))/1000)%60%60); myDisp=""; if (days != 0)myDisp+=days+"日と "; if (hours != 0)myDisp+=hours+"時間 "; if (minutes != 0)myDisp+=minutes+"分 "; myDisp+=seconds+"秒"; document.myForm.myFormDate.value = myDisp; setTimeout("xday()",1000); } // --></script> <form name="myForm"> <input type="text" size="35" name="myFormDate"> <script language="JavaScript"><!-- xday(); // --></script> </form> <script language="JavaScript"><!-- xDay(2008,9,13,15,00,00); // --></script> </body> </html>

  • JavaScriptからphp関数の呼び出し

    javaScriptで1秒毎にphpの関数を呼び出しているのですが、 php側で、returnしている日時が動的に表示されません。 何がいけないのか教えて頂けますでしょうか? 色んな参考ページを見ると、phpの関数で動的に 動かせると書いてあるのですが、動的になりません。 -------------------------------------------------------- <jsphptest.htmlソース> <html> <head> <script type="text/javascript"src="jsphptest.php"></script> <script language="javascript"> <!-- function time() { //JavaScriptで日時表示 var now = new Date(); mon = now.getMonth()+1; day = now.getDate(); hou = now.getHours(); min = now.getMinutes(); sec = now.getSeconds(); year = now.getYear(); if (year < 2000) { year += 1900; } if (mon <= "9"){mon = "0" + mon;}; if (day <= "9"){day = "0" + day;}; if (hou <= "9"){hou = "0" + hou;}; if (min <= "9"){min = "0" + min;}; if (sec <= "9"){sec = "0" + sec;}; document.form1.j_tokei.value= year +"/"+ mon +"/"+ day +" "+ hou +":"+ min +":"+ sec; //PHP関数の呼び出し document.form1.p_tokei.value= php_time(); //1秒毎 setTimeout('time()',1000); } // --> </script> </head> <body onLoad="time();"> <form name="form1" mathod=post> JavaScript日時<input type="text" name="j_tokei" size=25><br> PHP日時<input type="text" name="p_tokei" size=25> </form> </body> </html> -------------------------------------------------------- <jsphptest.phpソース> <?php $str .= "function php_time(){"; $str .= "return('".date('Y-m-d H:i:s')."');"; $str .= "}"; echo $str; ?>

  • HP開いた時、指定した期間別ページへ転送したい

    うまくいかず困っております。 お力を貸しください<(_ _)> 1月1日になったら、ホームページに入ると、自動的にお正月のあいさつの入った画像が入った 別ページにとびたいのですがうまくいきません。 1日だけ指定するプログラムはわかったのですが、期間指定しているのは探してもなくって、色々参考に試していますがうまくいかなくって困っております。 コードは以下の通りです。 お正月が終わって元に戻すのは、手動でもいいと考えています。 <script type="text/javascript"> myStartDate="2014/1/1"; myEndDate="2014/1/10"; myDate=new Date(); if(myDate.getTime()-mySD.getTime()> 0 && myED.getTime()-myDate.getTime()> 0){ location.href="http://○○/2014.html"; } </script>

  • JavaScript表示させる画像へリンクの貼り方

    初めて質問させていただきます。 JavaScript で、表示させた画像へのリンクの張り方を 教えていただきたいのです。 JavaScript のデータは、外部リンクになっています。 いろいろと見て回ったのですが、JavaScript に関しての知識不足で、 おそらく、調べきれていないのでは・・・とも思うのですが、 急ぎでどうしても必要ですので、教えていただきたいです。 よろしくお願いいたします。 // JavaScript Document //----開始日 YYYY/M/D 形式 半角数字で開始日指定 myStartDate="2012/9/14 16:29:00"; // 終了日 YYYY/M/D 形式 半角数字で終了日指定 myEndDate="2012/9/14 17:50:00"; //表示するHTML myHTML=("<img src='●●.jpg'>");  ←この画像にURLを付けたいです。 /******************************************************************/ myDate=new Date(); //現在の日付取得 mySD=new Date(myStartDate); myED=new Date(myEndDate); if(myDate.getTime()-mySD.getTime()> 0 && myED.getTime()-myDate.getTime()> 0){ document.write(myHTML); } ーーーーーーーーーーーーーーー <body> <div id="●●"> <script type="text/javascript" src="js/pr.js"></script> </div> </body>