Skip to content

Commit 17bec44

Browse files
committed
Add rounded conditionals to time format
1 parent 15a3d25 commit 17bec44

File tree

1 file changed

+15
-8
lines changed

1 file changed

+15
-8
lines changed

src/models/time.js

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ const mappings = ['complete', 'sign', 'weeks', 'days', 'hours', 'minutes', 'seco
66
const regex = /^(?:([-])\s*)?(?:(\d+)w\s*)?(?:(\d+)d\s*)?(?:(\d+)h\s*)?(?:(\d+)m\s*)?(?:(\d+)s\s*)?$/;
77
const conditionalRegex = /(\[\%([^\>\]]*)\>([^\]]*)\])/ig;
88
const roundedRegex = /(\[\%([^\>\]]*)\:([^\]]*)\])/ig;
9+
const conditionalSimpleRegex = /(.*)\>(.*)/ig;
910
const defaultRegex = /(\[\%([^\]]*)\])/ig;
1011

1112
Number.prototype.padLeft = function (n, str) {
@@ -96,7 +97,7 @@ class time {
9697
* @returns {string}
9798
*/
9899
static toHumanReadable(input, hoursPerDay = 8, format = time.defaultTimeFormat) {
99-
let sign = parseInt(input) < 0 ? '-' : '', output = format, match;
100+
let sign = parseInt(input) < 0 ? '-' : '', output = format, match, conditionalMatch;
100101
input = Math.abs(input);
101102

102103
let secondsInADay = 60 * 60 * hoursPerDay;
@@ -122,19 +123,25 @@ class time {
122123
inserts.seconds = ((input % secondsInADay) % secondsInAnHour) % secondsInAMinute;
123124
inserts.Seconds = inserts.seconds.padLeft(2, 0);
124125

126+
// rounded
127+
while ((match = roundedRegex.exec(format)) !== null) {
128+
if (match.index === roundedRegex.lastIndex) roundedRegex.lastIndex++;
129+
let time;
130+
131+
if ((conditionalMatch = conditionalSimpleRegex.exec(match[3])) !== null) {
132+
match[3] = conditionalMatch[1]
133+
}
134+
135+
time = Math.ceil(inserts[match[2]] * Math.pow(10, match[3])) / Math.pow(10, match[3]);
136+
output = output.replace(match[0], time !== 0 && conditionalMatch ? time + conditionalMatch[2] : '');
137+
}
138+
125139
// conditionals
126140
while ((match = conditionalRegex.exec(format)) !== null) {
127141
if (match.index === conditionalRegex.lastIndex) conditionalRegex.lastIndex++;
128142
output = output.replace(match[0], inserts[match[2]] > 0 ? inserts[match[2]] + match[3] : '');
129143
}
130144

131-
// rounded
132-
while ((match = roundedRegex.exec(format)) !== null) {
133-
if (match.index === roundedRegex.lastIndex) roundedRegex.lastIndex++;
134-
// console.log(match); process.exit();
135-
output = output.replace(match[0], Math.ceil(inserts[match[2]] * Math.pow(10, match[3])) / Math.pow(10, match[3]));
136-
}
137-
138145
// default
139146
format = output;
140147
while ((match = defaultRegex.exec(format)) !== null) {

0 commit comments

Comments
 (0)