-2

以下のメソッドを使用して、2 つの日付の日付差を取得しています。

var MS_PER_DAY = 1000 * 60 * 60 * 24;
関数 dateDiffInDays(dateFrom, dateTo) {
  var utc1 = Date.UTC(dateFrom.getFullYear(), dateFrom.getMonth(), dateFrom.getDate());
  var utc2 = Date.UTC(dateTo.getFullYear(), dateTo.getMonth(), dateTo.getDate());
  return Math.floor((utc2 - utc1) / MS_PER_DAY);
}

日付を as01-01-2013にして、どちらが間違っているか01-02-2013を返す場合28、予想される答えは31です。しかし、私がテストした他のすべてのケースでは、正しい答えが得られました。

この作業を正しく行うにはどうすればよいですか?

DownVoters: 理由をコメントしてください。

4

1 に答える 1

0

Javascripts Date()s 月は 0 ベースです。したがって、2 月 1 日と 3 月 1 日の差を計算しています。したがって、ここでの正しい結果は 28 です。

あなたが達成したかったのは、1月1日と2月1日の違いだったと思います。

そのため、日付 dateFrom と dateTo が設定されている場所を確認し、月を月 - 1 に変更する必要があります。

次に例を示します。

var fromDate = new Date(2013,1,1,0,0,0);
var toDate = new Date(2013,2,1,0,0,0);

var MS_PER_DAY = 1000 * 60 * 60 * 24;
function dateDiffInDays(dateFrom, dateTo) {
  var utc1 = Date.UTC(dateFrom.getFullYear(), dateFrom.getMonth(), dateFrom.getDate());
  var utc2 = Date.UTC(dateTo.getFullYear(), dateTo.getMonth(), dateTo.getDate());
  return Math.floor((utc2 - utc1) / MS_PER_DAY);
}

fromDate を 2 月 1 日に、toDate を 3 月 1 日に設定したため、これは正しく 28 日を返します。

0 ベースとは、新しい日付を作成するときに、月に書き込む必要があることを意味します。

1 月 0 日 2 月 1 日 3 月 2 日。. .

于 2013-10-31T09:35:38.590 に答える