2012-02-03 20 views
106

日付ピッカーコントロールから2つの入力日付を取得しています。私は開始日2012年2月2日と終了日2/7/2012を選択しました。私はそれのために次のコードを書いています。JavaScript:javascriptを使用して2つの日付間の日数を計算する方法

私は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); 
} 

を取得しています結果を取得する必要がありますか?

+1

... 7マイナス2は5 ... – Pointy

+0

なぜ結果= 6になるのですか? 07 - 02 = 05日.... –

+0

しかし、2日から7日の範囲は2,3,4,5,6,7 = 6日です。 – Supr

答えて

296

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

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により示唆されるように)「終了」で包括的または排他的であることを差分を強制します。
  2. 第3引数をtrueに設定して浮動小数点差分を取得し、必要に応じてMath.floor,Math.ceilまたはMath.roundとすることができます。
  3. オプション2は、'days'の代わりに'seconds'を取得し、次に24*60*60で除算することによっても達成できます。
+0

それは私のために働いてくれてありがとう。 –

+12

a

+4

時間部分を無視することに注意してください。同じ日付だが日付の異なる(日付ピッカーコントロールなどの) diff(または日付/モーメントオブジェクトの時間部分に敏感な他の操作)を実行する前に明示的に時間部分を00:00:00に設定するには、モーメント(someDate).startOf( 'day')を使用してください。 – kotpal

8

してみてください。モーメントのドキュメントから

//Difference in days 

var diff = Math.floor((start - end)/86400000); 
alert(diff); 
+0

私はそれが基本的に正しいと思っていますが、基本的にOPの内容と同じではありませんか? – Pointy

+0

彼はそれを書いた方法のために私は気付かなかったが、ええ、かなり! :P – Richard

+0

これはきれいで読みやすいです。 –

関連する問題