プロが教えるわが家の防犯対策術!

標記の件で質問です。

「JavaScript例文辞典」 www.openspc2.org/reibun/javascript/string/018/index.html
掲載の情報を元に下記の関数を作成しましたが、引数により、1日の誤差が出てしまいます。


<script Language="JavaScript"><!--
function DateDiffStr(strDtmSt,strDtmEd)
{
strArr = strDtmSt.split("/");
ys = strArr[0];
ms = strArr[1];
ds = strArr[2];
dtmSt = new Date(ys, ms, ds);

strArr = strDtmEd.split("/");
ye = strArr[0];
me = strArr[1];
de = strArr[2];
dtmEd = new Date(ye, me, de);

dayMS = 24 * 60 * 60 * 1000;
n = Math.floor((dtmEd.getTime() - dtmSt.getTime()) / dayMS);
return n;
}
// --></script>

具体的には、

DateDiffStr("2004/06/24","2004/06/30"); → 6 (○)
DateDiffStr("2004/06/24","2004/07/01"); → 8 (×)
DateDiffStr("2004/06/24","2004/09/01"); → 69 (○)

となります。月の跨ぎ方により、誤差が出るようです。
状況的には、浮動小数点数の演算誤差が疑わしいのですが、根本的な解決策はありますでしょうか?
一応、下記ページの解説も目を通し、紹介されている関数も試用してみたのですが、上記の現象は解消できませんでした。

http://www.geocities.co.jp/SiliconValley/4334/un …

解決策、または回避手段をご存知の方、ご教示頂けると幸いです。

A 回答 (1件)

new Date(YEAR, MONTH, DAY)


という形式で Dateオブジェクトを生成する時は、MONTH は実際の月から1を引いた値を指定する必要があります。

後はもうお分かりですね?

参考URL:http://tohoho.wakusei.ne.jp/js/date.htm#newDate
    • good
    • 0
この回答へのお礼

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

診立てが見当違いだったために明後日の方向を調べて時間を浪費してしまいました。

お礼日時:2004/06/24 23:12

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!