回答編集履歴

1

コード追記

2019/08/01 10:01

投稿

think49
think49

スコア18194

test CHANGED
@@ -4,7 +4,63 @@
4
4
 
5
5
  - 時分秒を0にリセットし、両値の減算結果を「1日分のミリ秒」で除算する
6
6
 
7
- - YYYYMMDD 形式の数値に変換し、減算する
7
+ - ~~YYYYMMDD 形式の数値に変換し、減算する~~
8
+
9
+
10
+
11
+ **2019/08/01 19:00追記**
12
+
13
+
14
+
15
+ > 20191101 - 20191031の数値で計算したら、1は得られないと思うのですが。
16
+
17
+
18
+
19
+ 確かにそうですね。
20
+
21
+ この方法は考え落ちでしたので、撤回します。
22
+
23
+
24
+
25
+ `new Date` はミリ秒のプリミティブ値を持つので、四則演算のみで対応するのがスマートかと思います。
26
+
27
+ 私は下記コードを書いてから、
28
+
29
+
30
+
31
+ ```JavaScript
32
+
33
+ ((afterDate - afterDate % 86400000) - (beforeDate - beforeDate % 86400000)) / 86400000;
34
+
35
+ ```
36
+
37
+
38
+
39
+ 最適化して、下記コードに変えます。
40
+
41
+
42
+
43
+ ```JavaScript
44
+
45
+ (afterDate - afterDate % 86400000 - beforeDate + beforeDate % 86400000) / 86400000;
46
+
47
+ ```
48
+
49
+
50
+
51
+ 下記コードのように、小数点以下切り捨てでも、おそらく可能ですが、
52
+
53
+
54
+
55
+ ```JavaScript
56
+
57
+ Math.ceil(afterDate/86400000)-Math.ceil(beforeDate/86400000)
58
+
59
+ ```
60
+
61
+
62
+
63
+ 浮動小数点演算の精度保証に詳しくない為、可能な限り、 整数演算を使うようにしています。
8
64
 
9
65
 
10
66