回答編集履歴

1

[2018/11/7 11:38] 追加の質問内容と質問者のやりたい内容に応じて修正しました。

2018/11/07 02:38

投稿

ZeroultR2
ZeroultR2

スコア27

test CHANGED
@@ -1,26 +1,62 @@
1
- 自身が提案する実装方法にして、要点して以下の2つがあります。
1
+ 自身が提案する実装方法は、時刻・時間とも、最も桁が小さい分に換算して、演算を行うものります。
2
-
3
- - 値の保持や演算は、桁が最も小さい分に換算して行う。(DB等への保存もあれば、その値も分換算とする)
4
-
5
- - 「hh:mm」の時刻表記や時間の取り扱いは、変換用の関数を作成して行う。
6
-
7
-
8
2
 
9
3
  ソースコードは、以下のようになります。
10
4
 
11
5
  ```JavaScript
12
6
 
13
- function calcTime() {
7
+ function testCalcTime() {
14
8
 
15
- var time = '21:00';
9
+ var time = '21:00';
16
10
 
17
- var addhour = "4.5";
11
+ var addhour = "4.5";
12
+
13
+ console.log(calcTime(time, addhour));
14
+
15
+ /** result: 25:30 */
18
16
 
19
17
 
20
18
 
21
- var calcTime = convertTimeToMinutes(time) + convertHourToMinutes(Number(addhour));
19
+ var time = '27:15';
22
20
 
21
+ var addhour = "30.8";
22
+
23
+ console.log(calcTime(time, addhour));
24
+
25
+ /** result: 58:03 */
26
+
27
+
28
+
29
+ var time = '23:00';
30
+
31
+ var addhour = "-10.7";
32
+
33
+ console.log(calcTime(time, addhour));
34
+
35
+ /** result: 12:18 */
36
+
37
+
38
+
39
+ var time = '10:00';
40
+
41
+ var addhour = "-10.5";
42
+
43
+ console.log(calcTime(time, addhour));
44
+
45
+ /** result: 0:00 */
46
+
47
+ }
48
+
49
+
50
+
51
+ /** 指定された時刻に時間を足した時刻を計算する */
52
+
53
+ function calcTime(time, addhour) {
54
+
55
+ var calcTime = convertTimeToMinutes(time) + convertHourToMinutes(Number(addhour));
56
+
57
+ if (calcTime < 0) calcTime = 0;
58
+
23
- console.log(convertMinutesToTime(calcTime));
59
+ return convertMinutesToTime(calcTime);
24
60
 
25
61
  }
26
62
 
@@ -30,9 +66,9 @@
30
66
 
31
67
  function convertTimeToMinutes(time){
32
68
 
33
- var times = time.split(':');
69
+ var times = time.split(':');
34
70
 
35
- return Number(times[0]) * 60 + Number(times[1]);
71
+ return Number(times[0]) * 60 + Number(times[1]);
36
72
 
37
73
  }
38
74
 
@@ -42,7 +78,7 @@
42
78
 
43
79
  function convertHourToMinutes(hour){
44
80
 
45
- return Math.floor(hour * 60); // とりあえず切り捨て
81
+ return Math.floor(hour * 60); // とりあえず切り捨て
46
82
 
47
83
  }
48
84
 
@@ -52,10 +88,8 @@
52
88
 
53
89
  function convertMinutesToTime(minutes){
54
90
 
55
- return Math.floor(minutes / 60) + ':' + (minutes % 60);
91
+ return Math.floor(minutes / 60) + ':' + ('00' + (minutes % 60)).slice(-2);
56
92
 
57
93
  }
58
94
 
59
95
  ```
60
-
61
- 時間で小数を扱うと端数処理が発生するため、出力のみ(画面への表示等)に用いた方が良いと思います。