/
time-math.js
94 lines (85 loc) · 2.06 KB
/
time-math.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
/**
* Formats hour, min into string HH:MM
*/
function hourMinToHourFormated (hours, minutes) {
var paddingHour = hours < 10 ? '0' : '';
var paddingMin = minutes < 10 ? '0' : '';
return paddingHour + hours +
':' +
paddingMin + minutes;
}
/**
* Determines if a time string holds a negative value
*/
function isNegative(str) {
return str[0] === '-';
}
/**
* Converts hour to min.
* Hours must be formated as HH:MM
*/
function hourToMinutes(time) {
var st = time.split(':');
var isNeg = isNegative(st);
st[0] = isNeg ? st[0].substr(1) : st[0];
var min = Number(st[1]) + (Number(st[0]) * 60);
if (isNeg) {
min = min * -1;
}
return min;
}
/**
* Formats a given amount of minutes into string HH:MM
*/
function minutesToHourFormated (min) {
var signStr = min < 0 ? '-' : '';
if (min < 0) {
min = Math.abs(min);
}
var hours = Math.floor(min / 60);
var minutes = Math.floor(min - (hours * 60));
return signStr + hourMinToHourFormated(hours, minutes);
}
/**
* Subtracts time first from second (t2 - t1)
* Time should be formated as HH:MM
*/
function subtractTime (t1, t2) {
var diffMin = hourToMinutes(t2) - hourToMinutes(t1);
return minutesToHourFormated(diffMin);
}
/**
* Multiplies t * n
* Time should be formated as HH:MM
*/
function multiplyTime (t, n) {
var totalMin = hourToMinutes(t);
totalMin = totalMin * n;
return minutesToHourFormated(totalMin);
}
/**
* Sums time first to second (t1 + t2)
* Time should be formated as HH:MM
*/
function sumTime(t1, t2) {
var sumMin = hourToMinutes(t2) + hourToMinutes(t1);
return minutesToHourFormated(sumMin);
}
/**
* Validates that a string is a valid time, following the format of HH:MM
* @returns true if it's valid
*/
function validateTime(time) {
var re = new RegExp('[0-2][0-9]:[0-5][0-9]');
return re.test(time);
}
module.exports = {
hourMinToHourFormated,
isNegative,
multiplyTime,
minutesToHourFormated,
subtractTime,
sumTime,
validateTime,
hourToMinutes
};