UNPKG

1.14 kBJavaScriptView Raw
1"use strict";
2
3const sprintf = require('../string/sprintf');
4
5const FORMAT_LIGHT = 'FORMAT_LIGHT';
6const FORMAT_FULL = 'FORMAT_FULL';
7
8const FORMATS = {
9 [FORMAT_FULL] : {
10 '%d s' : 60,
11 '%d min%s' : 60,
12 '%d hour%s' : 24,
13 '%d day%s' : 30,
14 '%d month%s' : 12,
15 '%d year%s' : 0,
16 },
17 [FORMAT_LIGHT] : {
18 '%ds' : 60,
19 '%dm' : 60,
20 '%dh' : 24,
21 '%dd' : 30,
22 '%dmonth%s' : 12,
23 '%dy' : 0,
24 }
25};
26
27module.exports = function(timestamp, max = 2, format = FORMAT_LIGHT) {
28 let steps = FORMATS[format];
29 let name = Object.keys(steps)[0];
30 let out = {};
31 timestamp = Math.ceil(timestamp);
32 if(!timestamp)
33 return sprintf(name, 0);
34
35
36 let current;
37 for(name in steps) {
38 let step_time = steps[name];
39 if(step_time == 0) {
40 current = Math.floor(timestamp);
41 } else {
42 current = Math.floor(timestamp % step_time);
43 timestamp /= step_time;
44 }
45 if(current > 0)
46 out[name] = sprintf(name, current, current > 1 ? 's' : '');
47 }
48 let keys = Object.keys(out).reverse().slice(0, max);
49 return keys.map(k => out[k]).join(' ');
50};
51