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

回答編集履歴

1

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

2018/11/07 02:38

投稿

ZeroultR2
ZeroultR2

スコア27

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