Date Picker コントロールから取得した 2 つの入力日付があります。開始日を 2012/2/2、終了日を 2012/2/7 に選択しました。そのために次のコードを記述しました。
結果は 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
http://momentjs.com/またはhttps://date-fns.org/
Moment ドキュメントより:
var a = moment([2007, 0, 29]);
var b = moment([2007, 0, 28]);
a.diff(b, 'days') // =1
または開始を含めるには:
a.diff(b, 'days')+1 // =2
タイムスタンプやタイムゾーンを手動で操作するよりも優れています。
具体的な使用例に応じて、
a/b.startOf('day')
and/orを使用してa/b.endOf('day')
、差分が「両端」で包含的または排他的になるように強制します (コメントで @kotpal が提案しているとおり)。- 3 番目の引数を設定すると、必要に応じて、または
true
浮動小数点の差分を取得できます。Math.floor
Math.ceil
Math.round
'seconds'
オプション 2 は、の代わりに を取得して'days'
で割ることによっても実現できます24*60*60
。