1 | "use strict";
|
2 |
|
3 | const sprintf = require('../string/sprintf');
|
4 |
|
5 | const FORMAT_LIGHT = 'FORMAT_LIGHT';
|
6 | const FORMAT_FULL = 'FORMAT_FULL';
|
7 |
|
8 | const 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 |
|
27 | module.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 |
|