質問するログイン新規登録

回答編集履歴

1

コード追記

2019/08/01 10:01

投稿

think49
think49

スコア18196

answer CHANGED
@@ -1,6 +1,34 @@
1
1
  2つの解決方法があります。
2
2
 
3
3
  - 時分秒を0にリセットし、両値の減算結果を「1日分のミリ秒」で除算する
4
- - YYYYMMDD 形式の数値に変換し、減算する
4
+ - ~~YYYYMMDD 形式の数値に変換し、減算する~~
5
5
 
6
+ **2019/08/01 19:00追記**
7
+
8
+ > 20191101 - 20191031の数値で計算したら、1は得られないと思うのですが。
9
+
10
+ 確かにそうですね。
11
+ この方法は考え落ちでしたので、撤回します。
12
+
13
+ `new Date` はミリ秒のプリミティブ値を持つので、四則演算のみで対応するのがスマートかと思います。
14
+ 私は下記コードを書いてから、
15
+
16
+ ```JavaScript
17
+ ((afterDate - afterDate % 86400000) - (beforeDate - beforeDate % 86400000)) / 86400000;
18
+ ```
19
+
20
+ 最適化して、下記コードに変えます。
21
+
22
+ ```JavaScript
23
+ (afterDate - afterDate % 86400000 - beforeDate + beforeDate % 86400000) / 86400000;
24
+ ```
25
+
26
+ 下記コードのように、小数点以下切り捨てでも、おそらく可能ですが、
27
+
28
+ ```JavaScript
29
+ Math.ceil(afterDate/86400000)-Math.ceil(beforeDate/86400000)
30
+ ```
31
+
32
+ 浮動小数点演算の精度保証に詳しくない為、可能な限り、 整数演算を使うようにしています。
33
+
6
34
  Re: tkshp さん