@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.
Files changed (161) hide show
  1. package/README.md +1 -1
  2. package/dist/array.cjs +181 -125
  3. package/dist/array.cjs.map +1 -1
  4. package/dist/array.mjs +181 -133
  5. package/dist/array.mjs.map +1 -1
  6. package/dist/async.cjs +181 -171
  7. package/dist/async.cjs.map +1 -1
  8. package/dist/async.mjs +181 -174
  9. package/dist/async.mjs.map +1 -1
  10. package/dist/base64.cjs +16 -12
  11. package/dist/base64.cjs.map +1 -1
  12. package/dist/base64.mjs +17 -14
  13. package/dist/base64.mjs.map +1 -1
  14. package/dist/cache.cjs +79 -67
  15. package/dist/cache.cjs.map +1 -1
  16. package/dist/cache.d.ts +3 -3
  17. package/dist/cache.mjs +80 -71
  18. package/dist/cache.mjs.map +1 -1
  19. package/dist/color.cjs +478 -167
  20. package/dist/color.cjs.map +1 -1
  21. package/dist/color.d.ts +3 -3
  22. package/dist/color.mjs +480 -197
  23. package/dist/color.mjs.map +1 -1
  24. package/dist/crypto.cjs +474 -687
  25. package/dist/crypto.cjs.map +1 -1
  26. package/dist/crypto.mjs +476 -693
  27. package/dist/crypto.mjs.map +1 -1
  28. package/dist/date.cjs +972 -161
  29. package/dist/date.cjs.map +1 -1
  30. package/dist/date.d.ts +2 -2
  31. package/dist/date.mjs +962 -191
  32. package/dist/date.mjs.map +1 -1
  33. package/dist/dict.cjs +90 -52
  34. package/dist/dict.cjs.map +1 -1
  35. package/dist/dict.d.ts +1 -1
  36. package/dist/dict.mjs +91 -54
  37. package/dist/dict.mjs.map +1 -1
  38. package/dist/easing.cjs +105 -103
  39. package/dist/easing.cjs.map +1 -1
  40. package/dist/easing.mjs +106 -133
  41. package/dist/easing.mjs.map +1 -1
  42. package/dist/emitter.cjs +101 -96
  43. package/dist/emitter.cjs.map +1 -1
  44. package/dist/emitter.mjs +101 -97
  45. package/dist/emitter.mjs.map +1 -1
  46. package/dist/env.cjs +43 -9
  47. package/dist/env.cjs.map +1 -1
  48. package/dist/env.d.ts +1 -1
  49. package/dist/env.mjs +43 -15
  50. package/dist/env.mjs.map +1 -1
  51. package/dist/error.cjs +26 -5
  52. package/dist/error.cjs.map +1 -1
  53. package/dist/error.mjs +26 -7
  54. package/dist/error.mjs.map +1 -1
  55. package/dist/exception.cjs +38 -20
  56. package/dist/exception.cjs.map +1 -1
  57. package/dist/exception.d.ts +5 -5
  58. package/dist/exception.mjs +38 -21
  59. package/dist/exception.mjs.map +1 -1
  60. package/dist/function.cjs +128 -68
  61. package/dist/function.cjs.map +1 -1
  62. package/dist/function.mjs +128 -72
  63. package/dist/function.mjs.map +1 -1
  64. package/dist/index.cjs +8 -3
  65. package/dist/index.cjs.map +1 -1
  66. package/dist/index.mjs +9 -5
  67. package/dist/index.mjs.map +1 -1
  68. package/dist/number.cjs +10 -14
  69. package/dist/number.mjs +2 -15
  70. package/dist/object/get-set.d.ts +27 -3
  71. package/dist/object/merge.d.ts +2 -2
  72. package/dist/object.cjs +369 -106
  73. package/dist/object.cjs.map +1 -1
  74. package/dist/object.mjs +366 -115
  75. package/dist/object.mjs.map +1 -1
  76. package/dist/path.cjs +144 -55
  77. package/dist/path.cjs.map +1 -1
  78. package/dist/path.mjs +144 -62
  79. package/dist/path.mjs.map +1 -1
  80. package/dist/promise.cjs +84 -43
  81. package/dist/promise.cjs.map +1 -1
  82. package/dist/promise.mjs +85 -50
  83. package/dist/promise.mjs.map +1 -1
  84. package/dist/qs.cjs +63 -39
  85. package/dist/qs.cjs.map +1 -1
  86. package/dist/qs.mjs +64 -42
  87. package/dist/qs.mjs.map +1 -1
  88. package/dist/regexp.cjs +118 -35
  89. package/dist/regexp.cjs.map +1 -1
  90. package/dist/regexp.mjs +119 -46
  91. package/dist/regexp.mjs.map +1 -1
  92. package/dist/string.cjs +12 -15
  93. package/dist/string.mjs +2 -16
  94. package/dist/string2.cjs +378 -142
  95. package/dist/string2.cjs.map +1 -1
  96. package/dist/string2.mjs +259 -143
  97. package/dist/string2.mjs.map +1 -1
  98. package/dist/time.cjs +136 -59
  99. package/dist/time.cjs.map +1 -1
  100. package/dist/time.mjs +136 -65
  101. package/dist/time.mjs.map +1 -1
  102. package/dist/timer.cjs +122 -112
  103. package/dist/timer.cjs.map +1 -1
  104. package/dist/timer.mjs +123 -115
  105. package/dist/timer.mjs.map +1 -1
  106. package/dist/tree.cjs +207 -112
  107. package/dist/tree.cjs.map +1 -1
  108. package/dist/tree.mjs +207 -116
  109. package/dist/tree.mjs.map +1 -1
  110. package/dist/try/curry.d.ts +1 -1
  111. package/dist/try.cjs +36 -37
  112. package/dist/try.cjs.map +1 -1
  113. package/dist/try.mjs +35 -37
  114. package/dist/try.mjs.map +1 -1
  115. package/dist/type.cjs +126 -24
  116. package/dist/type.cjs.map +1 -1
  117. package/dist/type.d.ts +2 -2
  118. package/dist/type.mjs +128 -45
  119. package/dist/type.mjs.map +1 -1
  120. package/dist/types.cjs +0 -2
  121. package/dist/types.d.ts +2 -2
  122. package/dist/types.mjs +0 -2
  123. package/dist/unique.cjs +41 -38
  124. package/dist/unique.cjs.map +1 -1
  125. package/dist/unique.mjs +42 -41
  126. package/dist/unique.mjs.map +1 -1
  127. package/dist/url.cjs +39 -30
  128. package/dist/url.cjs.map +1 -1
  129. package/dist/url.mjs +40 -33
  130. package/dist/url.mjs.map +1 -1
  131. package/dist/version.cjs +51 -33
  132. package/dist/version.cjs.map +1 -1
  133. package/dist/version.mjs +51 -35
  134. package/dist/version.mjs.map +1 -1
  135. package/package.json +104 -105
  136. package/dist/const.cjs +0 -14
  137. package/dist/const.cjs.map +0 -1
  138. package/dist/const.mjs +0 -15
  139. package/dist/const.mjs.map +0 -1
  140. package/dist/core.cjs +0 -362
  141. package/dist/core.cjs.map +0 -1
  142. package/dist/core.mjs +0 -363
  143. package/dist/core.mjs.map +0 -1
  144. package/dist/crypto/md5.d.mts +0 -1
  145. package/dist/crypto/sha1.d.mts +0 -1
  146. package/dist/crypto/sha256.d.mts +0 -1
  147. package/dist/crypto/sha512.d.mts +0 -1
  148. package/dist/each.cjs +0 -18
  149. package/dist/each.cjs.map +0 -1
  150. package/dist/each.mjs +0 -19
  151. package/dist/each.mjs.map +0 -1
  152. package/dist/merge.cjs +0 -87
  153. package/dist/merge.cjs.map +0 -1
  154. package/dist/merge.mjs +0 -88
  155. package/dist/merge.mjs.map +0 -1
  156. package/dist/number.cjs.map +0 -1
  157. package/dist/number.mjs.map +0 -1
  158. package/dist/string.cjs.map +0 -1
  159. package/dist/string.mjs.map +0 -1
  160. package/dist/types.cjs.map +0 -1
  161. 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 _const = require("./const.cjs");
4
- const type = require("./type.cjs");
5
- const rules = [
6
- ["years", _const.DATE_YEAR_MS],
7
- ["months", _const.DATE_MONTH_MS],
8
- ["days", _const.DATE_DAY_MS],
9
- ["hours", _const.DATE_HOUR_MS],
10
- ["minutes", _const.DATE_MINUTE_MS],
11
- ["seconds", _const.DATE_SECOND_MS]
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
- const td = type.isString(duration) ? timeParse(duration) : duration;
15
- return rules.reduce((acc, [key, time]) => acc + (td[key] || 0) * time, 0);
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
- const durationMatchRules = [
18
- [/(\d+)y/i, "years"],
19
- [/(\d+)M/, "months"],
20
- [/(\d+)d/i, "days"],
21
- [/(\d+)h/i, "hours"],
22
- [/(\d+)m/, "minutes"],
23
- [/(\d+)s/, "seconds"]
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
- const result = {};
27
- for (const [regex, key] of durationMatchRules) {
28
- const match = duration.match(regex);
29
- if (match) result[key] = Number(match[1]);
30
- else result[key] = 0;
31
- }
32
- return result;
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
- const minPoint = "S";
36
- const defines = [
37
- ["D", "days", _const.DATE_DAY_MS],
38
- ["h", "hours", _const.DATE_HOUR_MS],
39
- ["m", "minutes", _const.DATE_MINUTE_MS],
40
- ["s", "seconds", _const.DATE_SECOND_MS],
41
- ["S", "milliseconds", 1]
42
- ];
43
- const minIndex = defines.findIndex((item) => item[0] === maxPoint);
44
- const maxIndex = defines.findIndex((item) => item[0] === minPoint);
45
- let timeMsFinal = timeMs;
46
- const dao = {
47
- years: 0,
48
- months: 0,
49
- days: 0,
50
- hours: 0,
51
- minutes: 0,
52
- seconds: 0,
53
- milliseconds: 0
54
- };
55
- for (let i = minIndex; i <= maxIndex; i++) {
56
- const mode = defines[i];
57
- const base = mode[2];
58
- const value = Math.floor(timeMsFinal / base);
59
- timeMsFinal = timeMsFinal - value * base;
60
- dao[mode[1]] = value;
61
- }
62
- return dao;
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
- return _timeAbsolute(timeMs, "D");
125
+ return _timeAbsolute(timeMs, "D");
66
126
  }
127
+ /**
128
+ * 将时间毫秒数解析为以小时为最大单位的绝对时间对象
129
+ * @param timeMs 时间毫秒数
130
+ * @returns 包含小时/分钟/秒/毫秒分解结果的对象
131
+ */
67
132
  function timeToHours(timeMs) {
68
- return _timeAbsolute(timeMs, "h");
133
+ return _timeAbsolute(timeMs, "h");
69
134
  }
135
+ /**
136
+ * 将时间毫秒数解析为以分钟为最大单位的绝对时间对象
137
+ * @param timeMs 时间毫秒数
138
+ * @returns 包含分钟/秒/毫秒分解结果的对象
139
+ */
70
140
  function timeToMinutes(timeMs) {
71
- return _timeAbsolute(timeMs, "m");
141
+ return _timeAbsolute(timeMs, "m");
72
142
  }
143
+ /**
144
+ * 将时间毫秒数解析为以秒为最大单位的绝对时间对象
145
+ * @param timeMs 时间毫秒数
146
+ * @returns 包含秒/毫秒分解结果的对象
147
+ */
73
148
  function timeToSeconds(timeMs) {
74
- return _timeAbsolute(timeMs, "s");
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
- //# sourceMappingURL=time.cjs.map
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 { DATE_DAY_MS, DATE_HOUR_MS, DATE_MINUTE_MS, DATE_MONTH_MS, DATE_SECOND_MS, DATE_YEAR_MS } 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 { DATE_DAY_MS, DATE_HOUR_MS, DATE_MINUTE_MS, DATE_SECOND_MS } 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(timeMs: number, maxPoint: _TTimeParsePoint): TimeDuration {\n const minPoint: _TTimeParsePoint = 'S';\n\n const defines: [point: _TTimeParsePoint, key: keyof TimeDuration, base: number][] = [\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"],"names":["DATE_YEAR_MS","DATE_MONTH_MS","DATE_DAY_MS","DATE_HOUR_MS","DATE_MINUTE_MS","DATE_SECOND_MS","isString"],"mappings":";;;;AAYA,MAAM,QAAmD;AAAA,EACvD,CAAC,SAASA,OAAAA,YAAY;AAAA,EACtB,CAAC,UAAUC,OAAAA,aAAa;AAAA,EACxB,CAAC,QAAQC,OAAAA,WAAW;AAAA,EACpB,CAAC,SAASC,OAAAA,YAAY;AAAA,EACtB,CAAC,WAAWC,OAAAA,cAAc;AAAA,EAC1B,CAAC,WAAWC,OAAc,cAAA;AAC5B;AAQO,SAAS,SAAS,UAAiC;AACxD,QAAM,KAAKC,KAAAA,SAAS,QAAQ,IAAI,UAAU,QAAQ,IAAI;AACtD,SAAO,MAAM,OAAO,CAAC,KAAK,CAAC,KAAK,IAAI,MAAM,OAAO,GAAG,GAAG,KAAK,KAAK,MAAM,CAAC;AAC1E;AAEA,MAAM,qBAA0D;AAAA,EAC9D,CAAC,WAAW,OAAO;AAAA,EACnB,CAAC,UAAU,QAAQ;AAAA,EACnB,CAAC,WAAW,MAAM;AAAA,EAClB,CAAC,WAAW,OAAO;AAAA,EACnB,CAAC,UAAU,SAAS;AAAA,EACpB,CAAC,UAAU,SAAS;AACtB;AAOO,SAAS,UAAU,UAAkB;AAC1C,QAAM,SAAS,CAAC;AAEhB,aAAW,CAAC,OAAO,GAAG,KAAK,oBAAoB;AACvC,UAAA,QAAQ,SAAS,MAAM,KAAK;AAClC,QAAI,MAAc,QAAA,GAAG,IAAI,OAAO,MAAM,CAAC,CAAC;AAAA,QACnC,QAAO,GAAG,IAAI;AAAA,EAAA;AAGd,SAAA;AACT;ACrBA,SAAS,cAAc,QAAgB,UAA0C;AAC/E,QAAM,WAA6B;AAEnC,QAAM,UAA8E;AAAA,IAClF,CAAC,KAAK,QAAQJ,kBAAW;AAAA,IACzB,CAAC,KAAK,SAASC,mBAAY;AAAA,IAC3B,CAAC,KAAK,WAAWC,qBAAc;AAAA,IAC/B,CAAC,KAAK,WAAWC,qBAAc;AAAA,IAC/B,CAAC,KAAK,gBAAgB,CAAC;AAAA,EACzB;AAEM,QAAA,WAAW,QAAQ,UAAU,CAAC,SAAS,KAAK,CAAC,MAAM,QAAQ;AAC3D,QAAA,WAAW,QAAQ,UAAU,CAAC,SAAS,KAAK,CAAC,MAAM,QAAQ;AAEjE,MAAI,cAAc;AAClB,QAAM,MAAoB;AAAA,IACxB,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,OAAO;AAAA,IACP,SAAS;AAAA,IACT,SAAS;AAAA,IACT,cAAc;AAAA,EAChB;AAEA,WAAS,IAAI,UAAU,KAAK,UAAU,KAAK;AACnC,UAAA,OAAO,QAAQ,CAAC;AAChB,UAAA,OAAO,KAAK,CAAC;AACnB,UAAM,QAAQ,KAAK,MAAM,cAAc,IAAI;AAC3C,kBAAc,cAAc,QAAQ;AAChC,QAAA,KAAK,CAAC,CAAC,IAAI;AAAA,EAAA;AAGV,SAAA;AACT;AAOO,SAAS,WAAW,QAAgB;AAClC,SAAA,cAAc,QAAQ,GAAG;AAClC;AAOO,SAAS,YAAY,QAAgB;AACnC,SAAA,cAAc,QAAQ,GAAG;AAClC;AAOO,SAAS,cAAc,QAAgB;AACrC,SAAA,cAAc,QAAQ,GAAG;AAClC;AAOO,SAAS,cAAc,QAAgB;AACrC,SAAA,cAAc,QAAQ,GAAG;AAClC;;;;;;;"}
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
- const rules = [
4
- ["years", DATE_YEAR_MS],
5
- ["months", DATE_MONTH_MS],
6
- ["days", DATE_DAY_MS],
7
- ["hours", DATE_HOUR_MS],
8
- ["minutes", DATE_MINUTE_MS],
9
- ["seconds", DATE_SECOND_MS]
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
- const td = isString(duration) ? timeParse(duration) : duration;
13
- return rules.reduce((acc, [key, time]) => acc + (td[key] || 0) * time, 0);
25
+ const td = isString(duration) ? timeParse(duration) : duration;
26
+ return rules.reduce((acc, [key, time]) => acc + (td[key] || 0) * time, 0);
14
27
  }
15
- const durationMatchRules = [
16
- [/(\d+)y/i, "years"],
17
- [/(\d+)M/, "months"],
18
- [/(\d+)d/i, "days"],
19
- [/(\d+)h/i, "hours"],
20
- [/(\d+)m/, "minutes"],
21
- [/(\d+)s/, "seconds"]
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
- const result = {};
25
- for (const [regex, key] of durationMatchRules) {
26
- const match = duration.match(regex);
27
- if (match) result[key] = Number(match[1]);
28
- else result[key] = 0;
29
- }
30
- return result;
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
- const minPoint = "S";
34
- const defines = [
35
- ["D", "days", DATE_DAY_MS],
36
- ["h", "hours", DATE_HOUR_MS],
37
- ["m", "minutes", DATE_MINUTE_MS],
38
- ["s", "seconds", DATE_SECOND_MS],
39
- ["S", "milliseconds", 1]
40
- ];
41
- const minIndex = defines.findIndex((item) => item[0] === maxPoint);
42
- const maxIndex = defines.findIndex((item) => item[0] === minPoint);
43
- let timeMsFinal = timeMs;
44
- const dao = {
45
- years: 0,
46
- months: 0,
47
- days: 0,
48
- hours: 0,
49
- minutes: 0,
50
- seconds: 0,
51
- milliseconds: 0
52
- };
53
- for (let i = minIndex; i <= maxIndex; i++) {
54
- const mode = defines[i];
55
- const base = mode[2];
56
- const value = Math.floor(timeMsFinal / base);
57
- timeMsFinal = timeMsFinal - value * base;
58
- dao[mode[1]] = value;
59
- }
60
- return dao;
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
- return _timeAbsolute(timeMs, "D");
124
+ return _timeAbsolute(timeMs, "D");
64
125
  }
126
+ /**
127
+ * 将时间毫秒数解析为以小时为最大单位的绝对时间对象
128
+ * @param timeMs 时间毫秒数
129
+ * @returns 包含小时/分钟/秒/毫秒分解结果的对象
130
+ */
65
131
  function timeToHours(timeMs) {
66
- return _timeAbsolute(timeMs, "h");
132
+ return _timeAbsolute(timeMs, "h");
67
133
  }
134
+ /**
135
+ * 将时间毫秒数解析为以分钟为最大单位的绝对时间对象
136
+ * @param timeMs 时间毫秒数
137
+ * @returns 包含分钟/秒/毫秒分解结果的对象
138
+ */
68
139
  function timeToMinutes(timeMs) {
69
- return _timeAbsolute(timeMs, "m");
140
+ return _timeAbsolute(timeMs, "m");
70
141
  }
142
+ /**
143
+ * 将时间毫秒数解析为以秒为最大单位的绝对时间对象
144
+ * @param timeMs 时间毫秒数
145
+ * @returns 包含秒/毫秒分解结果的对象
146
+ */
71
147
  function timeToSeconds(timeMs) {
72
- return _timeAbsolute(timeMs, "s");
148
+ return _timeAbsolute(timeMs, "s");
73
149
  }
74
- export {
75
- timeFrom,
76
- timeParse,
77
- timeToDays,
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 { DATE_DAY_MS, DATE_HOUR_MS, DATE_MINUTE_MS, DATE_MONTH_MS, DATE_SECOND_MS, DATE_YEAR_MS } 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 { DATE_DAY_MS, DATE_HOUR_MS, DATE_MINUTE_MS, DATE_SECOND_MS } 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(timeMs: number, maxPoint: _TTimeParsePoint): TimeDuration {\n const minPoint: _TTimeParsePoint = 'S';\n\n const defines: [point: _TTimeParsePoint, key: keyof TimeDuration, base: number][] = [\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"],"names":[],"mappings":";;AAYA,MAAM,QAAmD;AAAA,EACvD,CAAC,SAAS,YAAY;AAAA,EACtB,CAAC,UAAU,aAAa;AAAA,EACxB,CAAC,QAAQ,WAAW;AAAA,EACpB,CAAC,SAAS,YAAY;AAAA,EACtB,CAAC,WAAW,cAAc;AAAA,EAC1B,CAAC,WAAW,cAAc;AAC5B;AAQO,SAAS,SAAS,UAAiC;AACxD,QAAM,KAAK,SAAS,QAAQ,IAAI,UAAU,QAAQ,IAAI;AACtD,SAAO,MAAM,OAAO,CAAC,KAAK,CAAC,KAAK,IAAI,MAAM,OAAO,GAAG,GAAG,KAAK,KAAK,MAAM,CAAC;AAC1E;AAEA,MAAM,qBAA0D;AAAA,EAC9D,CAAC,WAAW,OAAO;AAAA,EACnB,CAAC,UAAU,QAAQ;AAAA,EACnB,CAAC,WAAW,MAAM;AAAA,EAClB,CAAC,WAAW,OAAO;AAAA,EACnB,CAAC,UAAU,SAAS;AAAA,EACpB,CAAC,UAAU,SAAS;AACtB;AAOO,SAAS,UAAU,UAAkB;AAC1C,QAAM,SAAS,CAAC;AAEhB,aAAW,CAAC,OAAO,GAAG,KAAK,oBAAoB;AACvC,UAAA,QAAQ,SAAS,MAAM,KAAK;AAClC,QAAI,MAAc,QAAA,GAAG,IAAI,OAAO,MAAM,CAAC,CAAC;AAAA,QACnC,QAAO,GAAG,IAAI;AAAA,EAAA;AAGd,SAAA;AACT;ACrBA,SAAS,cAAc,QAAgB,UAA0C;AAC/E,QAAM,WAA6B;AAEnC,QAAM,UAA8E;AAAA,IAClF,CAAC,KAAK,QAAQ,WAAW;AAAA,IACzB,CAAC,KAAK,SAAS,YAAY;AAAA,IAC3B,CAAC,KAAK,WAAW,cAAc;AAAA,IAC/B,CAAC,KAAK,WAAW,cAAc;AAAA,IAC/B,CAAC,KAAK,gBAAgB,CAAC;AAAA,EACzB;AAEM,QAAA,WAAW,QAAQ,UAAU,CAAC,SAAS,KAAK,CAAC,MAAM,QAAQ;AAC3D,QAAA,WAAW,QAAQ,UAAU,CAAC,SAAS,KAAK,CAAC,MAAM,QAAQ;AAEjE,MAAI,cAAc;AAClB,QAAM,MAAoB;AAAA,IACxB,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,OAAO;AAAA,IACP,SAAS;AAAA,IACT,SAAS;AAAA,IACT,cAAc;AAAA,EAChB;AAEA,WAAS,IAAI,UAAU,KAAK,UAAU,KAAK;AACnC,UAAA,OAAO,QAAQ,CAAC;AAChB,UAAA,OAAO,KAAK,CAAC;AACnB,UAAM,QAAQ,KAAK,MAAM,cAAc,IAAI;AAC3C,kBAAc,cAAc,QAAQ;AAChC,QAAA,KAAK,CAAC,CAAC,IAAI;AAAA,EAAA;AAGV,SAAA;AACT;AAOO,SAAS,WAAW,QAAgB;AAClC,SAAA,cAAc,QAAQ,GAAG;AAClC;AAOO,SAAS,YAAY,QAAgB;AACnC,SAAA,cAAc,QAAQ,GAAG;AAClC;AAOO,SAAS,cAAc,QAAgB;AACrC,SAAA,cAAc,QAAQ,GAAG;AAClC;AAOO,SAAS,cAAc,QAAgB;AACrC,SAAA,cAAc,QAAQ,GAAG;AAClC;"}
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"}