1. ホーム
  2. ジャバスクリプト

[解決済み】2つの日付の間の日数を計算する方法

2022-03-25 01:20:28

質問

日付ピッカーコントロールから取得した2つの日付を入力しています。私は、開始日2/2/2012と終了日2/7/2012を選択しました。そのために以下のコードを書きました。

結果は6になるはずですが、5になっています。

function SetDays(invoker) {   
    var start = $find('<%=StartWebDatePicker.ClientID%>').get_value();
    var end = $find('<%=EndWebDatePicker.ClientID%>').get_value();

    var oneDay=1000 * 60 * 60 * 24;
    var difference_ms = Math.abs(end.getTime() - start.getTime())
    var diffValue = Math.round(difference_ms / oneDay);
}

どうすれば正確な差が出るのか、どなたか教えてください。

どのように解決するのですか?

http://momentjs.com/ または https://date-fns.org/

Moment docsより。

var a = moment([2007, 0, 29]);
var b = moment([2007, 0, 28]);
a.diff(b, 'days')   // =1

または開始を含むようにします。

a.diff(b, 'days')+1   // =2

タイムスタンプやタイムゾーンを手動でいじるよりも簡単です。

特定のユースケースに応じて、次のいずれかを行うことができます。

  1. 使用する a/b.startOf('day') または a/b.endOf('day') を使用して、(コメントで @kotpal が提案したように) "ends" で diff を強制的に包含または排他的にすることができます。
  2. 第3引数の設定 true を使用して、浮動小数点数の差分を取得し、それを Math.floor , Math.ceil または Math.round を必要に応じて設定します。
  3. オプション 2 は、次のようにしても実現できます。 'seconds' の代わりに 'days' で割ると 24*60*60 .