root / HServer / 00.Server / 00.Program / node_modules / ms / index.js
이력 | 보기 | 이력해설 | 다운로드 (2.7 KB)
1 | 39 | HKM | /**
|
---|---|---|---|
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 | } |