@cloudcome/utils-core 1.19.1 → 1.20.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/array.cjs +181 -125
- package/dist/array.cjs.map +1 -1
- package/dist/array.mjs +181 -133
- package/dist/array.mjs.map +1 -1
- package/dist/async.cjs +181 -171
- package/dist/async.cjs.map +1 -1
- package/dist/async.mjs +181 -174
- package/dist/async.mjs.map +1 -1
- package/dist/base64.cjs +16 -12
- package/dist/base64.cjs.map +1 -1
- package/dist/base64.mjs +17 -14
- package/dist/base64.mjs.map +1 -1
- package/dist/cache.cjs +79 -67
- package/dist/cache.cjs.map +1 -1
- package/dist/cache.d.ts +3 -3
- package/dist/cache.mjs +80 -71
- package/dist/cache.mjs.map +1 -1
- package/dist/color.cjs +478 -167
- package/dist/color.cjs.map +1 -1
- package/dist/color.d.ts +3 -3
- package/dist/color.mjs +480 -197
- package/dist/color.mjs.map +1 -1
- package/dist/crypto.cjs +474 -687
- package/dist/crypto.cjs.map +1 -1
- package/dist/crypto.mjs +476 -693
- package/dist/crypto.mjs.map +1 -1
- package/dist/date.cjs +972 -161
- package/dist/date.cjs.map +1 -1
- package/dist/date.d.ts +2 -2
- package/dist/date.mjs +962 -191
- package/dist/date.mjs.map +1 -1
- package/dist/dict.cjs +90 -52
- package/dist/dict.cjs.map +1 -1
- package/dist/dict.d.ts +1 -1
- package/dist/dict.mjs +91 -54
- package/dist/dict.mjs.map +1 -1
- package/dist/easing.cjs +105 -103
- package/dist/easing.cjs.map +1 -1
- package/dist/easing.mjs +106 -133
- package/dist/easing.mjs.map +1 -1
- package/dist/emitter.cjs +101 -96
- package/dist/emitter.cjs.map +1 -1
- package/dist/emitter.mjs +101 -97
- package/dist/emitter.mjs.map +1 -1
- package/dist/env.cjs +43 -9
- package/dist/env.cjs.map +1 -1
- package/dist/env.d.ts +1 -1
- package/dist/env.mjs +43 -15
- package/dist/env.mjs.map +1 -1
- package/dist/error.cjs +26 -5
- package/dist/error.cjs.map +1 -1
- package/dist/error.mjs +26 -7
- package/dist/error.mjs.map +1 -1
- package/dist/exception.cjs +38 -20
- package/dist/exception.cjs.map +1 -1
- package/dist/exception.d.ts +5 -5
- package/dist/exception.mjs +38 -21
- package/dist/exception.mjs.map +1 -1
- package/dist/function.cjs +128 -68
- package/dist/function.cjs.map +1 -1
- package/dist/function.mjs +128 -72
- package/dist/function.mjs.map +1 -1
- package/dist/index.cjs +8 -3
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +9 -5
- package/dist/index.mjs.map +1 -1
- package/dist/number.cjs +10 -14
- package/dist/number.mjs +2 -15
- package/dist/object/get-set.d.ts +27 -3
- package/dist/object/merge.d.ts +2 -2
- package/dist/object.cjs +369 -106
- package/dist/object.cjs.map +1 -1
- package/dist/object.mjs +366 -115
- package/dist/object.mjs.map +1 -1
- package/dist/path.cjs +144 -55
- package/dist/path.cjs.map +1 -1
- package/dist/path.mjs +144 -62
- package/dist/path.mjs.map +1 -1
- package/dist/promise.cjs +84 -43
- package/dist/promise.cjs.map +1 -1
- package/dist/promise.mjs +85 -50
- package/dist/promise.mjs.map +1 -1
- package/dist/qs.cjs +63 -39
- package/dist/qs.cjs.map +1 -1
- package/dist/qs.mjs +64 -42
- package/dist/qs.mjs.map +1 -1
- package/dist/regexp.cjs +118 -35
- package/dist/regexp.cjs.map +1 -1
- package/dist/regexp.mjs +119 -46
- package/dist/regexp.mjs.map +1 -1
- package/dist/string.cjs +12 -15
- package/dist/string.mjs +2 -16
- package/dist/string2.cjs +378 -142
- package/dist/string2.cjs.map +1 -1
- package/dist/string2.mjs +259 -143
- package/dist/string2.mjs.map +1 -1
- package/dist/time.cjs +136 -59
- package/dist/time.cjs.map +1 -1
- package/dist/time.mjs +136 -65
- package/dist/time.mjs.map +1 -1
- package/dist/timer.cjs +122 -112
- package/dist/timer.cjs.map +1 -1
- package/dist/timer.mjs +123 -115
- package/dist/timer.mjs.map +1 -1
- package/dist/tree.cjs +207 -112
- package/dist/tree.cjs.map +1 -1
- package/dist/tree.mjs +207 -116
- package/dist/tree.mjs.map +1 -1
- package/dist/try/curry.d.ts +1 -1
- package/dist/try.cjs +36 -37
- package/dist/try.cjs.map +1 -1
- package/dist/try.mjs +35 -37
- package/dist/try.mjs.map +1 -1
- package/dist/type.cjs +126 -24
- package/dist/type.cjs.map +1 -1
- package/dist/type.d.ts +2 -2
- package/dist/type.mjs +128 -45
- package/dist/type.mjs.map +1 -1
- package/dist/types.cjs +0 -2
- package/dist/types.d.ts +2 -2
- package/dist/types.mjs +0 -2
- package/dist/unique.cjs +41 -38
- package/dist/unique.cjs.map +1 -1
- package/dist/unique.mjs +42 -41
- package/dist/unique.mjs.map +1 -1
- package/dist/url.cjs +39 -30
- package/dist/url.cjs.map +1 -1
- package/dist/url.mjs +40 -33
- package/dist/url.mjs.map +1 -1
- package/dist/version.cjs +51 -33
- package/dist/version.cjs.map +1 -1
- package/dist/version.mjs +51 -35
- package/dist/version.mjs.map +1 -1
- package/package.json +104 -105
- package/dist/const.cjs +0 -14
- package/dist/const.cjs.map +0 -1
- package/dist/const.mjs +0 -15
- package/dist/const.mjs.map +0 -1
- package/dist/core.cjs +0 -362
- package/dist/core.cjs.map +0 -1
- package/dist/core.mjs +0 -363
- package/dist/core.mjs.map +0 -1
- package/dist/crypto/md5.d.mts +0 -1
- package/dist/crypto/sha1.d.mts +0 -1
- package/dist/crypto/sha256.d.mts +0 -1
- package/dist/crypto/sha512.d.mts +0 -1
- package/dist/each.cjs +0 -18
- package/dist/each.cjs.map +0 -1
- package/dist/each.mjs +0 -19
- package/dist/each.mjs.map +0 -1
- package/dist/merge.cjs +0 -87
- package/dist/merge.cjs.map +0 -1
- package/dist/merge.mjs +0 -88
- package/dist/merge.mjs.map +0 -1
- package/dist/number.cjs.map +0 -1
- package/dist/number.mjs.map +0 -1
- package/dist/string.cjs.map +0 -1
- package/dist/string.mjs.map +0 -1
- package/dist/types.cjs.map +0 -1
- package/dist/types.mjs.map +0 -1
package/dist/time.cjs
CHANGED
|
@@ -1,82 +1,159 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
-
const
|
|
4
|
-
const
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
2
|
+
const require_type = require("./type.cjs");
|
|
3
|
+
const require_date = require("./date.cjs");
|
|
4
|
+
//#region src/time/from.ts
|
|
5
|
+
/**
|
|
6
|
+
* 时间转换规则数组
|
|
7
|
+
* @type {Array<[RegExp, (match: RegExpMatchArray) => number]>}
|
|
8
|
+
* @property {RegExp} 0 - 匹配时间单位正则表达式
|
|
9
|
+
* @property {function} 1 - 将匹配结果转换为毫秒数的函数
|
|
10
|
+
*/
|
|
11
|
+
var rules = [
|
|
12
|
+
["years", require_date.DATE_YEAR_MS],
|
|
13
|
+
["months", require_date.DATE_MONTH_MS],
|
|
14
|
+
["days", require_date.DATE_DAY_MS],
|
|
15
|
+
["hours", require_date.DATE_HOUR_MS],
|
|
16
|
+
["minutes", require_date.DATE_MINUTE_MS],
|
|
17
|
+
["seconds", require_date.DATE_SECOND_MS]
|
|
12
18
|
];
|
|
19
|
+
/**
|
|
20
|
+
* 将时间持续时间字符串或对象转换为毫秒数
|
|
21
|
+
*
|
|
22
|
+
* @param duration - 可以是时间持续时间字符串(如 '1d2h')或 TimeDuration 对象
|
|
23
|
+
* @returns 计算得到的总毫秒数
|
|
24
|
+
*/
|
|
13
25
|
function timeFrom(duration) {
|
|
14
|
-
|
|
15
|
-
|
|
26
|
+
const td = require_type.isString(duration) ? timeParse(duration) : duration;
|
|
27
|
+
return rules.reduce((acc, [key, time]) => acc + (td[key] || 0) * time, 0);
|
|
16
28
|
}
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
29
|
+
var durationMatchRules = [
|
|
30
|
+
[/(\d+)y/i, "years"],
|
|
31
|
+
[/(\d+)M/, "months"],
|
|
32
|
+
[/(\d+)d/i, "days"],
|
|
33
|
+
[/(\d+)h/i, "hours"],
|
|
34
|
+
[/(\d+)m/, "minutes"],
|
|
35
|
+
[/(\d+)s/, "seconds"]
|
|
24
36
|
];
|
|
37
|
+
/**
|
|
38
|
+
* 将时长字符串解析为时间对象
|
|
39
|
+
* @param duration - 时长字符串(例如 "1h30m")
|
|
40
|
+
* @returns 包含解析后时间单位的对象(小时、分钟等)
|
|
41
|
+
*/
|
|
25
42
|
function timeParse(duration) {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
43
|
+
const result = {};
|
|
44
|
+
for (const [regex, key] of durationMatchRules) {
|
|
45
|
+
const match = duration.match(regex);
|
|
46
|
+
if (match) result[key] = Number(match[1]);
|
|
47
|
+
else result[key] = 0;
|
|
48
|
+
}
|
|
49
|
+
return result;
|
|
33
50
|
}
|
|
51
|
+
//#endregion
|
|
52
|
+
//#region src/time/to.ts
|
|
53
|
+
/**
|
|
54
|
+
* 解析时间毫秒数为绝对时间对象
|
|
55
|
+
* @param timeMs 时间毫秒数
|
|
56
|
+
* @param maxPoint 最大时间单位(决定分解的起始单位)
|
|
57
|
+
* @returns 包含时间单位分解结果的对象
|
|
58
|
+
* @example
|
|
59
|
+
* ```typescript
|
|
60
|
+
* // 默认以天为最大单位分解
|
|
61
|
+
* timeInDay(123456789);
|
|
62
|
+
* // { days: 1, hours: 10, minutes: 17, seconds: 36, milliseconds: 789 }
|
|
63
|
+
*
|
|
64
|
+
* // 指定最大单位为分钟,分解到分钟及以下单位
|
|
65
|
+
* timeInMinute(123456789);
|
|
66
|
+
* // { days: 0, hours: 0, minutes: 2057, seconds: 36, milliseconds: 789 }
|
|
67
|
+
* ```
|
|
68
|
+
*/
|
|
34
69
|
function _timeAbsolute(timeMs, maxPoint) {
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
70
|
+
const minPoint = "S";
|
|
71
|
+
const defines = [
|
|
72
|
+
[
|
|
73
|
+
"D",
|
|
74
|
+
"days",
|
|
75
|
+
require_date.DATE_DAY_MS
|
|
76
|
+
],
|
|
77
|
+
[
|
|
78
|
+
"h",
|
|
79
|
+
"hours",
|
|
80
|
+
require_date.DATE_HOUR_MS
|
|
81
|
+
],
|
|
82
|
+
[
|
|
83
|
+
"m",
|
|
84
|
+
"minutes",
|
|
85
|
+
require_date.DATE_MINUTE_MS
|
|
86
|
+
],
|
|
87
|
+
[
|
|
88
|
+
"s",
|
|
89
|
+
"seconds",
|
|
90
|
+
require_date.DATE_SECOND_MS
|
|
91
|
+
],
|
|
92
|
+
[
|
|
93
|
+
"S",
|
|
94
|
+
"milliseconds",
|
|
95
|
+
1
|
|
96
|
+
]
|
|
97
|
+
];
|
|
98
|
+
const minIndex = defines.findIndex((item) => item[0] === maxPoint);
|
|
99
|
+
const maxIndex = defines.findIndex((item) => item[0] === minPoint);
|
|
100
|
+
let timeMsFinal = timeMs;
|
|
101
|
+
const dao = {
|
|
102
|
+
years: 0,
|
|
103
|
+
months: 0,
|
|
104
|
+
days: 0,
|
|
105
|
+
hours: 0,
|
|
106
|
+
minutes: 0,
|
|
107
|
+
seconds: 0,
|
|
108
|
+
milliseconds: 0
|
|
109
|
+
};
|
|
110
|
+
for (let i = minIndex; i <= maxIndex; i++) {
|
|
111
|
+
const mode = defines[i];
|
|
112
|
+
const base = mode[2];
|
|
113
|
+
const value = Math.floor(timeMsFinal / base);
|
|
114
|
+
timeMsFinal = timeMsFinal - value * base;
|
|
115
|
+
dao[mode[1]] = value;
|
|
116
|
+
}
|
|
117
|
+
return dao;
|
|
63
118
|
}
|
|
119
|
+
/**
|
|
120
|
+
* 将时间毫秒数解析为以天为最大单位的绝对时间对象
|
|
121
|
+
* @param timeMs 时间毫秒数
|
|
122
|
+
* @returns 包含天/小时/分钟/秒/毫秒分解结果的对象
|
|
123
|
+
*/
|
|
64
124
|
function timeToDays(timeMs) {
|
|
65
|
-
|
|
125
|
+
return _timeAbsolute(timeMs, "D");
|
|
66
126
|
}
|
|
127
|
+
/**
|
|
128
|
+
* 将时间毫秒数解析为以小时为最大单位的绝对时间对象
|
|
129
|
+
* @param timeMs 时间毫秒数
|
|
130
|
+
* @returns 包含小时/分钟/秒/毫秒分解结果的对象
|
|
131
|
+
*/
|
|
67
132
|
function timeToHours(timeMs) {
|
|
68
|
-
|
|
133
|
+
return _timeAbsolute(timeMs, "h");
|
|
69
134
|
}
|
|
135
|
+
/**
|
|
136
|
+
* 将时间毫秒数解析为以分钟为最大单位的绝对时间对象
|
|
137
|
+
* @param timeMs 时间毫秒数
|
|
138
|
+
* @returns 包含分钟/秒/毫秒分解结果的对象
|
|
139
|
+
*/
|
|
70
140
|
function timeToMinutes(timeMs) {
|
|
71
|
-
|
|
141
|
+
return _timeAbsolute(timeMs, "m");
|
|
72
142
|
}
|
|
143
|
+
/**
|
|
144
|
+
* 将时间毫秒数解析为以秒为最大单位的绝对时间对象
|
|
145
|
+
* @param timeMs 时间毫秒数
|
|
146
|
+
* @returns 包含秒/毫秒分解结果的对象
|
|
147
|
+
*/
|
|
73
148
|
function timeToSeconds(timeMs) {
|
|
74
|
-
|
|
149
|
+
return _timeAbsolute(timeMs, "s");
|
|
75
150
|
}
|
|
151
|
+
//#endregion
|
|
76
152
|
exports.timeFrom = timeFrom;
|
|
77
153
|
exports.timeParse = timeParse;
|
|
78
154
|
exports.timeToDays = timeToDays;
|
|
79
155
|
exports.timeToHours = timeToHours;
|
|
80
156
|
exports.timeToMinutes = timeToMinutes;
|
|
81
157
|
exports.timeToSeconds = timeToSeconds;
|
|
82
|
-
|
|
158
|
+
|
|
159
|
+
//# sourceMappingURL=time.cjs.map
|
package/dist/time.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"time.cjs","sources":["../src/time/from.ts","../src/time/to.ts"],"sourcesContent":["// @rer https://day.js.org/docs/en/durations/creating\n\nimport {
|
|
1
|
+
{"version":3,"file":"time.cjs","names":[],"sources":["../src/time/from.ts","../src/time/to.ts"],"sourcesContent":["// @rer https://day.js.org/docs/en/durations/creating\n\nimport {\n DATE_DAY_MS,\n DATE_HOUR_MS,\n DATE_MINUTE_MS,\n DATE_MONTH_MS,\n DATE_SECOND_MS,\n DATE_YEAR_MS,\n} from '@/date';\nimport { isString } from '@/type';\nimport type { TimeDuration } from './to';\n\n/**\n * 时间转换规则数组\n * @type {Array<[RegExp, (match: RegExpMatchArray) => number]>}\n * @property {RegExp} 0 - 匹配时间单位正则表达式\n * @property {function} 1 - 将匹配结果转换为毫秒数的函数\n */\nconst rules: [key: keyof TimeDuration, time: number][] = [\n ['years', DATE_YEAR_MS],\n ['months', DATE_MONTH_MS],\n ['days', DATE_DAY_MS],\n ['hours', DATE_HOUR_MS],\n ['minutes', DATE_MINUTE_MS],\n ['seconds', DATE_SECOND_MS],\n];\n\n/**\n * 将时间持续时间字符串或对象转换为毫秒数\n *\n * @param duration - 可以是时间持续时间字符串(如 '1d2h')或 TimeDuration 对象\n * @returns 计算得到的总毫秒数\n */\nexport function timeFrom(duration: string | TimeDuration) {\n const td = isString(duration) ? timeParse(duration) : duration;\n return rules.reduce((acc, [key, time]) => acc + (td[key] || 0) * time, 0);\n}\n\nconst durationMatchRules: [RegExp, key: keyof TimeDuration][] = [\n [/(\\d+)y/i, 'years'],\n [/(\\d+)M/, 'months'],\n [/(\\d+)d/i, 'days'],\n [/(\\d+)h/i, 'hours'],\n [/(\\d+)m/, 'minutes'],\n [/(\\d+)s/, 'seconds'],\n];\n\n/**\n * 将时长字符串解析为时间对象\n * @param duration - 时长字符串(例如 \"1h30m\")\n * @returns 包含解析后时间单位的对象(小时、分钟等)\n */\nexport function timeParse(duration: string) {\n const result = {} as TimeDuration;\n\n for (const [regex, key] of durationMatchRules) {\n const match = duration.match(regex);\n if (match) result[key] = Number(match[1]);\n else result[key] = 0;\n }\n\n return result;\n}\n","import {\n DATE_DAY_MS,\n DATE_HOUR_MS,\n DATE_MINUTE_MS,\n DATE_SECOND_MS,\n} from '../date';\n\nexport type TimeDuration = {\n years: number;\n months: number;\n /** 天数 */\n days: number;\n /** 小时数 */\n hours: number;\n /** 分钟数 */\n minutes: number;\n /** 秒数 */\n seconds: number;\n /** 毫秒数 */\n milliseconds: number;\n};\n\ntype _TTimeParsePoint = 'D' | 'h' | 'm' | 's' | 'S';\n\n/**\n * 解析时间毫秒数为绝对时间对象\n * @param timeMs 时间毫秒数\n * @param maxPoint 最大时间单位(决定分解的起始单位)\n * @returns 包含时间单位分解结果的对象\n * @example\n * ```typescript\n * // 默认以天为最大单位分解\n * timeInDay(123456789);\n * // { days: 1, hours: 10, minutes: 17, seconds: 36, milliseconds: 789 }\n *\n * // 指定最大单位为分钟,分解到分钟及以下单位\n * timeInMinute(123456789);\n * // { days: 0, hours: 0, minutes: 2057, seconds: 36, milliseconds: 789 }\n * ```\n */\nfunction _timeAbsolute(\n timeMs: number,\n maxPoint: _TTimeParsePoint,\n): TimeDuration {\n const minPoint: _TTimeParsePoint = 'S';\n\n const defines: [\n point: _TTimeParsePoint,\n key: keyof TimeDuration,\n base: number,\n ][] = [\n ['D', 'days', DATE_DAY_MS],\n ['h', 'hours', DATE_HOUR_MS],\n ['m', 'minutes', DATE_MINUTE_MS],\n ['s', 'seconds', DATE_SECOND_MS],\n ['S', 'milliseconds', 1],\n ] as const;\n\n const minIndex = defines.findIndex((item) => item[0] === maxPoint);\n const maxIndex = defines.findIndex((item) => item[0] === minPoint);\n\n let timeMsFinal = timeMs;\n const dao: TimeDuration = {\n years: 0,\n months: 0,\n days: 0,\n hours: 0,\n minutes: 0,\n seconds: 0,\n milliseconds: 0,\n };\n\n for (let i = minIndex; i <= maxIndex; i++) {\n const mode = defines[i];\n const base = mode[2];\n const value = Math.floor(timeMsFinal / base);\n timeMsFinal = timeMsFinal - value * base;\n dao[mode[1]] = value;\n }\n\n return dao;\n}\n\n/**\n * 将时间毫秒数解析为以天为最大单位的绝对时间对象\n * @param timeMs 时间毫秒数\n * @returns 包含天/小时/分钟/秒/毫秒分解结果的对象\n */\nexport function timeToDays(timeMs: number) {\n return _timeAbsolute(timeMs, 'D');\n}\n\n/**\n * 将时间毫秒数解析为以小时为最大单位的绝对时间对象\n * @param timeMs 时间毫秒数\n * @returns 包含小时/分钟/秒/毫秒分解结果的对象\n */\nexport function timeToHours(timeMs: number) {\n return _timeAbsolute(timeMs, 'h');\n}\n\n/**\n * 将时间毫秒数解析为以分钟为最大单位的绝对时间对象\n * @param timeMs 时间毫秒数\n * @returns 包含分钟/秒/毫秒分解结果的对象\n */\nexport function timeToMinutes(timeMs: number) {\n return _timeAbsolute(timeMs, 'm');\n}\n\n/**\n * 将时间毫秒数解析为以秒为最大单位的绝对时间对象\n * @param timeMs 时间毫秒数\n * @returns 包含秒/毫秒分解结果的对象\n */\nexport function timeToSeconds(timeMs: number) {\n return _timeAbsolute(timeMs, 's');\n}\n"],"mappings":";;;;;;;;;;AAmBA,IAAM,QAAmD;CACvD,CAAC,SAAS,aAAA,aAAa;CACvB,CAAC,UAAU,aAAA,cAAc;CACzB,CAAC,QAAQ,aAAA,YAAY;CACrB,CAAC,SAAS,aAAA,aAAa;CACvB,CAAC,WAAW,aAAA,eAAe;CAC3B,CAAC,WAAW,aAAA,eAAe;CAC5B;;;;;;;AAQD,SAAgB,SAAS,UAAiC;CACxD,MAAM,KAAK,aAAA,SAAS,SAAS,GAAG,UAAU,SAAS,GAAG;CACtD,OAAO,MAAM,QAAQ,KAAK,CAAC,KAAK,UAAU,OAAO,GAAG,QAAQ,KAAK,MAAM,EAAE;;AAG3E,IAAM,qBAA0D;CAC9D,CAAC,WAAW,QAAQ;CACpB,CAAC,UAAU,SAAS;CACpB,CAAC,WAAW,OAAO;CACnB,CAAC,WAAW,QAAQ;CACpB,CAAC,UAAU,UAAU;CACrB,CAAC,UAAU,UAAU;CACtB;;;;;;AAOD,SAAgB,UAAU,UAAkB;CAC1C,MAAM,SAAS,EAAE;CAEjB,KAAK,MAAM,CAAC,OAAO,QAAQ,oBAAoB;EAC7C,MAAM,QAAQ,SAAS,MAAM,MAAM;EACnC,IAAI,OAAO,OAAO,OAAO,OAAO,MAAM,GAAG;OACpC,OAAO,OAAO;;CAGrB,OAAO;;;;;;;;;;;;;;;;;;;;ACtBT,SAAS,cACP,QACA,UACc;CACd,MAAM,WAA6B;CAEnC,MAAM,UAIA;EACJ;GAAC;GAAK;GAAQ,aAAA;GAAY;EAC1B;GAAC;GAAK;GAAS,aAAA;GAAa;EAC5B;GAAC;GAAK;GAAW,aAAA;GAAe;EAChC;GAAC;GAAK;GAAW,aAAA;GAAe;EAChC;GAAC;GAAK;GAAgB;GAAE;EACzB;CAED,MAAM,WAAW,QAAQ,WAAW,SAAS,KAAK,OAAO,SAAS;CAClE,MAAM,WAAW,QAAQ,WAAW,SAAS,KAAK,OAAO,SAAS;CAElE,IAAI,cAAc;CAClB,MAAM,MAAoB;EACxB,OAAO;EACP,QAAQ;EACR,MAAM;EACN,OAAO;EACP,SAAS;EACT,SAAS;EACT,cAAc;EACf;CAED,KAAK,IAAI,IAAI,UAAU,KAAK,UAAU,KAAK;EACzC,MAAM,OAAO,QAAQ;EACrB,MAAM,OAAO,KAAK;EAClB,MAAM,QAAQ,KAAK,MAAM,cAAc,KAAK;EAC5C,cAAc,cAAc,QAAQ;EACpC,IAAI,KAAK,MAAM;;CAGjB,OAAO;;;;;;;AAQT,SAAgB,WAAW,QAAgB;CACzC,OAAO,cAAc,QAAQ,IAAI;;;;;;;AAQnC,SAAgB,YAAY,QAAgB;CAC1C,OAAO,cAAc,QAAQ,IAAI;;;;;;;AAQnC,SAAgB,cAAc,QAAgB;CAC5C,OAAO,cAAc,QAAQ,IAAI;;;;;;;AAQnC,SAAgB,cAAc,QAAgB;CAC5C,OAAO,cAAc,QAAQ,IAAI"}
|
package/dist/time.mjs
CHANGED
|
@@ -1,82 +1,153 @@
|
|
|
1
|
-
import { D as DATE_YEAR_MS, a as DATE_MONTH_MS, b as DATE_DAY_MS, c as DATE_HOUR_MS, d as DATE_MINUTE_MS, e as DATE_SECOND_MS } from "./const.mjs";
|
|
2
1
|
import { isString } from "./type.mjs";
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
2
|
+
import { DATE_DAY_MS, DATE_HOUR_MS, DATE_MINUTE_MS, DATE_MONTH_MS, DATE_SECOND_MS, DATE_YEAR_MS } from "./date.mjs";
|
|
3
|
+
//#region src/time/from.ts
|
|
4
|
+
/**
|
|
5
|
+
* 时间转换规则数组
|
|
6
|
+
* @type {Array<[RegExp, (match: RegExpMatchArray) => number]>}
|
|
7
|
+
* @property {RegExp} 0 - 匹配时间单位正则表达式
|
|
8
|
+
* @property {function} 1 - 将匹配结果转换为毫秒数的函数
|
|
9
|
+
*/
|
|
10
|
+
var rules = [
|
|
11
|
+
["years", DATE_YEAR_MS],
|
|
12
|
+
["months", DATE_MONTH_MS],
|
|
13
|
+
["days", DATE_DAY_MS],
|
|
14
|
+
["hours", DATE_HOUR_MS],
|
|
15
|
+
["minutes", DATE_MINUTE_MS],
|
|
16
|
+
["seconds", DATE_SECOND_MS]
|
|
10
17
|
];
|
|
18
|
+
/**
|
|
19
|
+
* 将时间持续时间字符串或对象转换为毫秒数
|
|
20
|
+
*
|
|
21
|
+
* @param duration - 可以是时间持续时间字符串(如 '1d2h')或 TimeDuration 对象
|
|
22
|
+
* @returns 计算得到的总毫秒数
|
|
23
|
+
*/
|
|
11
24
|
function timeFrom(duration) {
|
|
12
|
-
|
|
13
|
-
|
|
25
|
+
const td = isString(duration) ? timeParse(duration) : duration;
|
|
26
|
+
return rules.reduce((acc, [key, time]) => acc + (td[key] || 0) * time, 0);
|
|
14
27
|
}
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
28
|
+
var durationMatchRules = [
|
|
29
|
+
[/(\d+)y/i, "years"],
|
|
30
|
+
[/(\d+)M/, "months"],
|
|
31
|
+
[/(\d+)d/i, "days"],
|
|
32
|
+
[/(\d+)h/i, "hours"],
|
|
33
|
+
[/(\d+)m/, "minutes"],
|
|
34
|
+
[/(\d+)s/, "seconds"]
|
|
22
35
|
];
|
|
36
|
+
/**
|
|
37
|
+
* 将时长字符串解析为时间对象
|
|
38
|
+
* @param duration - 时长字符串(例如 "1h30m")
|
|
39
|
+
* @returns 包含解析后时间单位的对象(小时、分钟等)
|
|
40
|
+
*/
|
|
23
41
|
function timeParse(duration) {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
42
|
+
const result = {};
|
|
43
|
+
for (const [regex, key] of durationMatchRules) {
|
|
44
|
+
const match = duration.match(regex);
|
|
45
|
+
if (match) result[key] = Number(match[1]);
|
|
46
|
+
else result[key] = 0;
|
|
47
|
+
}
|
|
48
|
+
return result;
|
|
31
49
|
}
|
|
50
|
+
//#endregion
|
|
51
|
+
//#region src/time/to.ts
|
|
52
|
+
/**
|
|
53
|
+
* 解析时间毫秒数为绝对时间对象
|
|
54
|
+
* @param timeMs 时间毫秒数
|
|
55
|
+
* @param maxPoint 最大时间单位(决定分解的起始单位)
|
|
56
|
+
* @returns 包含时间单位分解结果的对象
|
|
57
|
+
* @example
|
|
58
|
+
* ```typescript
|
|
59
|
+
* // 默认以天为最大单位分解
|
|
60
|
+
* timeInDay(123456789);
|
|
61
|
+
* // { days: 1, hours: 10, minutes: 17, seconds: 36, milliseconds: 789 }
|
|
62
|
+
*
|
|
63
|
+
* // 指定最大单位为分钟,分解到分钟及以下单位
|
|
64
|
+
* timeInMinute(123456789);
|
|
65
|
+
* // { days: 0, hours: 0, minutes: 2057, seconds: 36, milliseconds: 789 }
|
|
66
|
+
* ```
|
|
67
|
+
*/
|
|
32
68
|
function _timeAbsolute(timeMs, maxPoint) {
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
69
|
+
const minPoint = "S";
|
|
70
|
+
const defines = [
|
|
71
|
+
[
|
|
72
|
+
"D",
|
|
73
|
+
"days",
|
|
74
|
+
DATE_DAY_MS
|
|
75
|
+
],
|
|
76
|
+
[
|
|
77
|
+
"h",
|
|
78
|
+
"hours",
|
|
79
|
+
DATE_HOUR_MS
|
|
80
|
+
],
|
|
81
|
+
[
|
|
82
|
+
"m",
|
|
83
|
+
"minutes",
|
|
84
|
+
DATE_MINUTE_MS
|
|
85
|
+
],
|
|
86
|
+
[
|
|
87
|
+
"s",
|
|
88
|
+
"seconds",
|
|
89
|
+
DATE_SECOND_MS
|
|
90
|
+
],
|
|
91
|
+
[
|
|
92
|
+
"S",
|
|
93
|
+
"milliseconds",
|
|
94
|
+
1
|
|
95
|
+
]
|
|
96
|
+
];
|
|
97
|
+
const minIndex = defines.findIndex((item) => item[0] === maxPoint);
|
|
98
|
+
const maxIndex = defines.findIndex((item) => item[0] === minPoint);
|
|
99
|
+
let timeMsFinal = timeMs;
|
|
100
|
+
const dao = {
|
|
101
|
+
years: 0,
|
|
102
|
+
months: 0,
|
|
103
|
+
days: 0,
|
|
104
|
+
hours: 0,
|
|
105
|
+
minutes: 0,
|
|
106
|
+
seconds: 0,
|
|
107
|
+
milliseconds: 0
|
|
108
|
+
};
|
|
109
|
+
for (let i = minIndex; i <= maxIndex; i++) {
|
|
110
|
+
const mode = defines[i];
|
|
111
|
+
const base = mode[2];
|
|
112
|
+
const value = Math.floor(timeMsFinal / base);
|
|
113
|
+
timeMsFinal = timeMsFinal - value * base;
|
|
114
|
+
dao[mode[1]] = value;
|
|
115
|
+
}
|
|
116
|
+
return dao;
|
|
61
117
|
}
|
|
118
|
+
/**
|
|
119
|
+
* 将时间毫秒数解析为以天为最大单位的绝对时间对象
|
|
120
|
+
* @param timeMs 时间毫秒数
|
|
121
|
+
* @returns 包含天/小时/分钟/秒/毫秒分解结果的对象
|
|
122
|
+
*/
|
|
62
123
|
function timeToDays(timeMs) {
|
|
63
|
-
|
|
124
|
+
return _timeAbsolute(timeMs, "D");
|
|
64
125
|
}
|
|
126
|
+
/**
|
|
127
|
+
* 将时间毫秒数解析为以小时为最大单位的绝对时间对象
|
|
128
|
+
* @param timeMs 时间毫秒数
|
|
129
|
+
* @returns 包含小时/分钟/秒/毫秒分解结果的对象
|
|
130
|
+
*/
|
|
65
131
|
function timeToHours(timeMs) {
|
|
66
|
-
|
|
132
|
+
return _timeAbsolute(timeMs, "h");
|
|
67
133
|
}
|
|
134
|
+
/**
|
|
135
|
+
* 将时间毫秒数解析为以分钟为最大单位的绝对时间对象
|
|
136
|
+
* @param timeMs 时间毫秒数
|
|
137
|
+
* @returns 包含分钟/秒/毫秒分解结果的对象
|
|
138
|
+
*/
|
|
68
139
|
function timeToMinutes(timeMs) {
|
|
69
|
-
|
|
140
|
+
return _timeAbsolute(timeMs, "m");
|
|
70
141
|
}
|
|
142
|
+
/**
|
|
143
|
+
* 将时间毫秒数解析为以秒为最大单位的绝对时间对象
|
|
144
|
+
* @param timeMs 时间毫秒数
|
|
145
|
+
* @returns 包含秒/毫秒分解结果的对象
|
|
146
|
+
*/
|
|
71
147
|
function timeToSeconds(timeMs) {
|
|
72
|
-
|
|
148
|
+
return _timeAbsolute(timeMs, "s");
|
|
73
149
|
}
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
timeToHours,
|
|
79
|
-
timeToMinutes,
|
|
80
|
-
timeToSeconds
|
|
81
|
-
};
|
|
82
|
-
//# sourceMappingURL=time.mjs.map
|
|
150
|
+
//#endregion
|
|
151
|
+
export { timeFrom, timeParse, timeToDays, timeToHours, timeToMinutes, timeToSeconds };
|
|
152
|
+
|
|
153
|
+
//# sourceMappingURL=time.mjs.map
|
package/dist/time.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"time.mjs","sources":["../src/time/from.ts","../src/time/to.ts"],"sourcesContent":["// @rer https://day.js.org/docs/en/durations/creating\n\nimport {
|
|
1
|
+
{"version":3,"file":"time.mjs","names":[],"sources":["../src/time/from.ts","../src/time/to.ts"],"sourcesContent":["// @rer https://day.js.org/docs/en/durations/creating\n\nimport {\n DATE_DAY_MS,\n DATE_HOUR_MS,\n DATE_MINUTE_MS,\n DATE_MONTH_MS,\n DATE_SECOND_MS,\n DATE_YEAR_MS,\n} from '@/date';\nimport { isString } from '@/type';\nimport type { TimeDuration } from './to';\n\n/**\n * 时间转换规则数组\n * @type {Array<[RegExp, (match: RegExpMatchArray) => number]>}\n * @property {RegExp} 0 - 匹配时间单位正则表达式\n * @property {function} 1 - 将匹配结果转换为毫秒数的函数\n */\nconst rules: [key: keyof TimeDuration, time: number][] = [\n ['years', DATE_YEAR_MS],\n ['months', DATE_MONTH_MS],\n ['days', DATE_DAY_MS],\n ['hours', DATE_HOUR_MS],\n ['minutes', DATE_MINUTE_MS],\n ['seconds', DATE_SECOND_MS],\n];\n\n/**\n * 将时间持续时间字符串或对象转换为毫秒数\n *\n * @param duration - 可以是时间持续时间字符串(如 '1d2h')或 TimeDuration 对象\n * @returns 计算得到的总毫秒数\n */\nexport function timeFrom(duration: string | TimeDuration) {\n const td = isString(duration) ? timeParse(duration) : duration;\n return rules.reduce((acc, [key, time]) => acc + (td[key] || 0) * time, 0);\n}\n\nconst durationMatchRules: [RegExp, key: keyof TimeDuration][] = [\n [/(\\d+)y/i, 'years'],\n [/(\\d+)M/, 'months'],\n [/(\\d+)d/i, 'days'],\n [/(\\d+)h/i, 'hours'],\n [/(\\d+)m/, 'minutes'],\n [/(\\d+)s/, 'seconds'],\n];\n\n/**\n * 将时长字符串解析为时间对象\n * @param duration - 时长字符串(例如 \"1h30m\")\n * @returns 包含解析后时间单位的对象(小时、分钟等)\n */\nexport function timeParse(duration: string) {\n const result = {} as TimeDuration;\n\n for (const [regex, key] of durationMatchRules) {\n const match = duration.match(regex);\n if (match) result[key] = Number(match[1]);\n else result[key] = 0;\n }\n\n return result;\n}\n","import {\n DATE_DAY_MS,\n DATE_HOUR_MS,\n DATE_MINUTE_MS,\n DATE_SECOND_MS,\n} from '../date';\n\nexport type TimeDuration = {\n years: number;\n months: number;\n /** 天数 */\n days: number;\n /** 小时数 */\n hours: number;\n /** 分钟数 */\n minutes: number;\n /** 秒数 */\n seconds: number;\n /** 毫秒数 */\n milliseconds: number;\n};\n\ntype _TTimeParsePoint = 'D' | 'h' | 'm' | 's' | 'S';\n\n/**\n * 解析时间毫秒数为绝对时间对象\n * @param timeMs 时间毫秒数\n * @param maxPoint 最大时间单位(决定分解的起始单位)\n * @returns 包含时间单位分解结果的对象\n * @example\n * ```typescript\n * // 默认以天为最大单位分解\n * timeInDay(123456789);\n * // { days: 1, hours: 10, minutes: 17, seconds: 36, milliseconds: 789 }\n *\n * // 指定最大单位为分钟,分解到分钟及以下单位\n * timeInMinute(123456789);\n * // { days: 0, hours: 0, minutes: 2057, seconds: 36, milliseconds: 789 }\n * ```\n */\nfunction _timeAbsolute(\n timeMs: number,\n maxPoint: _TTimeParsePoint,\n): TimeDuration {\n const minPoint: _TTimeParsePoint = 'S';\n\n const defines: [\n point: _TTimeParsePoint,\n key: keyof TimeDuration,\n base: number,\n ][] = [\n ['D', 'days', DATE_DAY_MS],\n ['h', 'hours', DATE_HOUR_MS],\n ['m', 'minutes', DATE_MINUTE_MS],\n ['s', 'seconds', DATE_SECOND_MS],\n ['S', 'milliseconds', 1],\n ] as const;\n\n const minIndex = defines.findIndex((item) => item[0] === maxPoint);\n const maxIndex = defines.findIndex((item) => item[0] === minPoint);\n\n let timeMsFinal = timeMs;\n const dao: TimeDuration = {\n years: 0,\n months: 0,\n days: 0,\n hours: 0,\n minutes: 0,\n seconds: 0,\n milliseconds: 0,\n };\n\n for (let i = minIndex; i <= maxIndex; i++) {\n const mode = defines[i];\n const base = mode[2];\n const value = Math.floor(timeMsFinal / base);\n timeMsFinal = timeMsFinal - value * base;\n dao[mode[1]] = value;\n }\n\n return dao;\n}\n\n/**\n * 将时间毫秒数解析为以天为最大单位的绝对时间对象\n * @param timeMs 时间毫秒数\n * @returns 包含天/小时/分钟/秒/毫秒分解结果的对象\n */\nexport function timeToDays(timeMs: number) {\n return _timeAbsolute(timeMs, 'D');\n}\n\n/**\n * 将时间毫秒数解析为以小时为最大单位的绝对时间对象\n * @param timeMs 时间毫秒数\n * @returns 包含小时/分钟/秒/毫秒分解结果的对象\n */\nexport function timeToHours(timeMs: number) {\n return _timeAbsolute(timeMs, 'h');\n}\n\n/**\n * 将时间毫秒数解析为以分钟为最大单位的绝对时间对象\n * @param timeMs 时间毫秒数\n * @returns 包含分钟/秒/毫秒分解结果的对象\n */\nexport function timeToMinutes(timeMs: number) {\n return _timeAbsolute(timeMs, 'm');\n}\n\n/**\n * 将时间毫秒数解析为以秒为最大单位的绝对时间对象\n * @param timeMs 时间毫秒数\n * @returns 包含秒/毫秒分解结果的对象\n */\nexport function timeToSeconds(timeMs: number) {\n return _timeAbsolute(timeMs, 's');\n}\n"],"mappings":";;;;;;;;;AAmBA,IAAM,QAAmD;CACvD,CAAC,SAAS,aAAa;CACvB,CAAC,UAAU,cAAc;CACzB,CAAC,QAAQ,YAAY;CACrB,CAAC,SAAS,aAAa;CACvB,CAAC,WAAW,eAAe;CAC3B,CAAC,WAAW,eAAe;CAC5B;;;;;;;AAQD,SAAgB,SAAS,UAAiC;CACxD,MAAM,KAAK,SAAS,SAAS,GAAG,UAAU,SAAS,GAAG;CACtD,OAAO,MAAM,QAAQ,KAAK,CAAC,KAAK,UAAU,OAAO,GAAG,QAAQ,KAAK,MAAM,EAAE;;AAG3E,IAAM,qBAA0D;CAC9D,CAAC,WAAW,QAAQ;CACpB,CAAC,UAAU,SAAS;CACpB,CAAC,WAAW,OAAO;CACnB,CAAC,WAAW,QAAQ;CACpB,CAAC,UAAU,UAAU;CACrB,CAAC,UAAU,UAAU;CACtB;;;;;;AAOD,SAAgB,UAAU,UAAkB;CAC1C,MAAM,SAAS,EAAE;CAEjB,KAAK,MAAM,CAAC,OAAO,QAAQ,oBAAoB;EAC7C,MAAM,QAAQ,SAAS,MAAM,MAAM;EACnC,IAAI,OAAO,OAAO,OAAO,OAAO,MAAM,GAAG;OACpC,OAAO,OAAO;;CAGrB,OAAO;;;;;;;;;;;;;;;;;;;;ACtBT,SAAS,cACP,QACA,UACc;CACd,MAAM,WAA6B;CAEnC,MAAM,UAIA;EACJ;GAAC;GAAK;GAAQ;GAAY;EAC1B;GAAC;GAAK;GAAS;GAAa;EAC5B;GAAC;GAAK;GAAW;GAAe;EAChC;GAAC;GAAK;GAAW;GAAe;EAChC;GAAC;GAAK;GAAgB;GAAE;EACzB;CAED,MAAM,WAAW,QAAQ,WAAW,SAAS,KAAK,OAAO,SAAS;CAClE,MAAM,WAAW,QAAQ,WAAW,SAAS,KAAK,OAAO,SAAS;CAElE,IAAI,cAAc;CAClB,MAAM,MAAoB;EACxB,OAAO;EACP,QAAQ;EACR,MAAM;EACN,OAAO;EACP,SAAS;EACT,SAAS;EACT,cAAc;EACf;CAED,KAAK,IAAI,IAAI,UAAU,KAAK,UAAU,KAAK;EACzC,MAAM,OAAO,QAAQ;EACrB,MAAM,OAAO,KAAK;EAClB,MAAM,QAAQ,KAAK,MAAM,cAAc,KAAK;EAC5C,cAAc,cAAc,QAAQ;EACpC,IAAI,KAAK,MAAM;;CAGjB,OAAO;;;;;;;AAQT,SAAgB,WAAW,QAAgB;CACzC,OAAO,cAAc,QAAQ,IAAI;;;;;;;AAQnC,SAAgB,YAAY,QAAgB;CAC1C,OAAO,cAAc,QAAQ,IAAI;;;;;;;AAQnC,SAAgB,cAAc,QAAgB;CAC5C,OAAO,cAAc,QAAQ,IAAI;;;;;;;AAQnC,SAAgB,cAAc,QAAgB;CAC5C,OAAO,cAAc,QAAQ,IAAI"}
|