root / HServer / 00.Server / 00.Program / node_modules / ms / index.js
이력 | 보기 | 이력해설 | 다운로드 (2.7 KB)
1 |
/**
|
---|---|
2 |
* Helpers.
|
3 |
*/
|
4 |
|
5 |
var s = 1000; |
6 |
var m = s * 60; |
7 |
var h = m * 60; |
8 |
var d = h * 24; |
9 |
var y = d * 365.25; |
10 |
|
11 |
/**
|
12 |
* Parse or format the given `val`.
|
13 |
*
|
14 |
* Options:
|
15 |
*
|
16 |
* - `long` verbose formatting [false]
|
17 |
*
|
18 |
* @param {String|Number} val
|
19 |
* @param {Object} [options]
|
20 |
* @throws {Error} throw an error if val is not a non-empty string or a number
|
21 |
* @return {String|Number}
|
22 |
* @api public
|
23 |
*/
|
24 |
|
25 |
module.exports = function(val, options) { |
26 |
options = options || {}; |
27 |
var type = typeof val; |
28 |
if (type === 'string' && val.length > 0) { |
29 |
return parse(val);
|
30 |
} else if (type === 'number' && isNaN(val) === false) { |
31 |
return options.long ? fmtLong(val) : fmtShort(val); |
32 |
} |
33 |
throw new Error( |
34 |
'val is not a non-empty string or a valid number. val=' +
|
35 |
JSON.stringify(val) |
36 |
); |
37 |
}; |
38 |
|
39 |
/**
|
40 |
* Parse the given `str` and return milliseconds.
|
41 |
*
|
42 |
* @param {String} str
|
43 |
* @return {Number}
|
44 |
* @api private
|
45 |
*/
|
46 |
|
47 |
function parse(str) { |
48 |
str = String(str); |
49 |
if (str.length > 100) { |
50 |
return;
|
51 |
} |
52 |
var match = /^((?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec( |
53 |
str |
54 |
); |
55 |
if (!match) {
|
56 |
return;
|
57 |
} |
58 |
var n = parseFloat(match[1]); |
59 |
var type = (match[2] || 'ms').toLowerCase(); |
60 |
switch (type) {
|
61 |
case 'years': |
62 |
case 'year': |
63 |
case 'yrs': |
64 |
case 'yr': |
65 |
case 'y': |
66 |
return n * y;
|
67 |
case 'days': |
68 |
case 'day': |
69 |
case 'd': |
70 |
return n * d;
|
71 |
case 'hours': |
72 |
case 'hour': |
73 |
case 'hrs': |
74 |
case 'hr': |
75 |
case 'h': |
76 |
return n * h;
|
77 |
case 'minutes': |
78 |
case 'minute': |
79 |
case 'mins': |
80 |
case 'min': |
81 |
case 'm': |
82 |
return n * m;
|
83 |
case 'seconds': |
84 |
case 'second': |
85 |
case 'secs': |
86 |
case 'sec': |
87 |
case 's': |
88 |
return n * s;
|
89 |
case 'milliseconds': |
90 |
case 'millisecond': |
91 |
case 'msecs': |
92 |
case 'msec': |
93 |
case 'ms': |
94 |
return n;
|
95 |
default:
|
96 |
return undefined; |
97 |
} |
98 |
} |
99 |
|
100 |
/**
|
101 |
* Short format for `ms`.
|
102 |
*
|
103 |
* @param {Number} ms
|
104 |
* @return {String}
|
105 |
* @api private
|
106 |
*/
|
107 |
|
108 |
function fmtShort(ms) { |
109 |
if (ms >= d) {
|
110 |
return Math.round(ms / d) + 'd'; |
111 |
} |
112 |
if (ms >= h) {
|
113 |
return Math.round(ms / h) + 'h'; |
114 |
} |
115 |
if (ms >= m) {
|
116 |
return Math.round(ms / m) + 'm'; |
117 |
} |
118 |
if (ms >= s) {
|
119 |
return Math.round(ms / s) + 's'; |
120 |
} |
121 |
return ms + 'ms'; |
122 |
} |
123 |
|
124 |
/**
|
125 |
* Long format for `ms`.
|
126 |
*
|
127 |
* @param {Number} ms
|
128 |
* @return {String}
|
129 |
* @api private
|
130 |
*/
|
131 |
|
132 |
function fmtLong(ms) { |
133 |
return plural(ms, d, 'day') || |
134 |
plural(ms, h, 'hour') ||
|
135 |
plural(ms, m, 'minute') ||
|
136 |
plural(ms, s, 'second') ||
|
137 |
ms + ' ms';
|
138 |
} |
139 |
|
140 |
/**
|
141 |
* Pluralization helper.
|
142 |
*/
|
143 |
|
144 |
function plural(ms, n, name) { |
145 |
if (ms < n) {
|
146 |
return;
|
147 |
} |
148 |
if (ms < n * 1.5) { |
149 |
return Math.floor(ms / n) + ' ' + name; |
150 |
} |
151 |
return Math.ceil(ms / n) + ' ' + name + 's'; |
152 |
} |