0

以下のコードに問題があります。日付文字列を取得して日付オブジェクトに変換しようとしています。次に、この日付と今日の日付の間の日数を計算します。

以下の例は「6 日」を返すはずですが、代わりに「35 日」を返しています。

var tmp = '20/11/2013';
var myDateParts = tmp.split("/");                       
var oneDay = 24*60*60*1000;
var today = new Date();
var secondDate = new Date(myDateParts[2], myDateParts[1], myDateParts[0]);
var diffDays = Math.round(Math.abs((secondDate.getTime() - today.getTime()))/(oneDay));

console.log(diffDays+' days');

私が間違っているところを誰でも見ることができますか?

ありがとう

4

3 に答える 3

2

月は 0 から始まるため、11 は 12 月を意味します (35 日は、今日、2013 年 11 月 14 日と 2013 年 12 月 20 日の正しい差です)。

この行を変更します。

var secondDate = new Date(myDateParts[2], myDateParts[1], myDateParts[0]);

これに:

var secondDate = new Date(myDateParts[2], parseInt(myDateParts[1])-1, myDateParts[0]);
于 2013-11-14T18:35:01.513 に答える
0

JavaScript 日付コンストラクターは、0 を 1 月、1 を 2 月などと見なします。
したがって、getTime を適用する前に、「tmp」月の値から 1 を引く必要があります。

于 2013-11-14T18:37:58.577 に答える
0

1 つずれているエラーがあります。月のインデックスがゼロのようです。この jsfiddle を参照してください: http://jsfiddle.net/62YK6/

var tmp = '21/10/2013';
var myDateParts = tmp.split("/");                       
var oneDay = 24*60*60*1000;
var today = new Date();
var secondDate = new Date(myDateParts[2], myDateParts[1], myDateParts[0]);
var diffDays = Math.round(Math.abs((secondDate.getTime() - today.getTime()))/(oneDay));

console.log(secondDate);
console.log(diffDays+' days');
于 2013-11-14T18:38:15.627 に答える