diff options
Diffstat (limited to 'src/lib/utils/readable_time.ts')
| -rw-r--r-- | src/lib/utils/readable_time.ts | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/src/lib/utils/readable_time.ts b/src/lib/utils/readable_time.ts new file mode 100644 index 0000000..86ba044 --- /dev/null +++ b/src/lib/utils/readable_time.ts @@ -0,0 +1,46 @@ +type DateMagnitude = 'day' | 'hour' | 'minute' | 'second'; + +type ReadableTime = { + count: number, + label: string +}; + + +const internals = { + magnitudes: { + day: 86400000, + hour: 3600000, + minute: 60000, + second: 1000 + }, + labels: { + day: 'time.days', + hour: 'time.hours', + minute: 'time.minutes', + second: 'time.seconds' + }, + + makeTimeReadable(time: number, magnitude: DateMagnitude): ReadableTime { + + return { + count: Math.floor(time / internals.magnitudes[magnitude]), + label: internals.labels[magnitude] + }; + } +}; + +export const readableTime = function readableTime(time: number): ReadableTime { + + switch (true) { + case time >= internals.magnitudes.day: + return internals.makeTimeReadable(time, 'day'); + case time >= internals.magnitudes.hour: + return internals.makeTimeReadable(time, 'hour'); + case time >= internals.magnitudes.minute: + return internals.makeTimeReadable(time, 'minute'); + case time < 0: + return internals.makeTimeReadable(0, 'second'); + default: + return internals.makeTimeReadable(time, 'second'); + } +}; |