@cloudcome/utils-core 1.1.1 → 1.2.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 (291) hide show
  1. package/dist/array.cjs +129 -0
  2. package/dist/array.cjs.map +1 -0
  3. package/dist/array.d.ts +171 -0
  4. package/dist/array.mjs +129 -0
  5. package/dist/array.mjs.map +1 -0
  6. package/dist/async.cjs +219 -0
  7. package/dist/async.cjs.map +1 -0
  8. package/dist/async.d.ts +137 -0
  9. package/dist/async.mjs +219 -0
  10. package/dist/async.mjs.map +1 -0
  11. package/dist/base64.cjs +16 -0
  12. package/dist/base64.cjs.map +1 -0
  13. package/dist/base64.d.ts +7 -0
  14. package/dist/base64.mjs +16 -0
  15. package/dist/base64.mjs.map +1 -0
  16. package/dist/cache.cjs +79 -0
  17. package/dist/cache.cjs.map +1 -0
  18. package/dist/cache.d.ts +90 -0
  19. package/dist/cache.mjs +79 -0
  20. package/dist/cache.mjs.map +1 -0
  21. package/{src/color/contrast.ts → dist/color/contrast.d.ts} +2 -12
  22. package/dist/color/distance.d.ts +8 -0
  23. package/dist/color/helpers.d.ts +2 -0
  24. package/dist/color/hex-hsl.d.ts +3 -0
  25. package/{src/color/hex-hsv.ts → dist/color/hex-hsv.d.ts} +3 -11
  26. package/{src/color/hex-hwb.ts → dist/color/hex-hwb.d.ts} +3 -11
  27. package/dist/color/hex-rgb.d.ts +18 -0
  28. package/{src/color/hsl-lighten.ts → dist/color/hsl-lighten.d.ts} +2 -7
  29. package/{src/color/hsv-brighten.ts → dist/color/hsv-brighten.d.ts} +2 -7
  30. package/{src/color/luminance.ts → dist/color/luminance.d.ts} +2 -9
  31. package/{src/color/mix.ts → dist/color/mix.d.ts} +2 -10
  32. package/dist/color/rgb-hsl.d.ts +23 -0
  33. package/{src/color/rgb-hsv.ts → dist/color/rgb-hsv.d.ts} +3 -30
  34. package/dist/color/rgb-hwb.d.ts +29 -0
  35. package/{src/color/rgb-lab.ts → dist/color/rgb-lab.d.ts} +3 -11
  36. package/dist/color/rgb-whiter.d.ts +12 -0
  37. package/dist/color/rgb-xyz.d.ts +22 -0
  38. package/{src/color/types.ts → dist/color/types.d.ts} +30 -12
  39. package/{src/color/xyz-lab.ts → dist/color/xyz-lab.d.ts} +3 -32
  40. package/dist/color.cjs +250 -0
  41. package/dist/color.cjs.map +1 -0
  42. package/dist/color.mjs +250 -0
  43. package/dist/color.mjs.map +1 -0
  44. package/dist/const.cjs +14 -0
  45. package/dist/const.cjs.map +1 -0
  46. package/dist/const.mjs +15 -0
  47. package/dist/const.mjs.map +1 -0
  48. package/dist/core.cjs +250 -0
  49. package/dist/core.cjs.map +1 -0
  50. package/dist/core.mjs +251 -0
  51. package/dist/core.mjs.map +1 -0
  52. package/dist/crypto/md5.d.mts +1 -0
  53. package/dist/crypto/sha1.d.mts +1 -0
  54. package/dist/crypto/sha256.d.mts +1 -0
  55. package/dist/crypto/sha512.d.mts +1 -0
  56. package/dist/crypto.cjs +812 -0
  57. package/dist/crypto.cjs.map +1 -0
  58. package/{src/crypto.ts → dist/crypto.d.ts} +4 -20
  59. package/dist/crypto.mjs +812 -0
  60. package/dist/crypto.mjs.map +1 -0
  61. package/dist/date/const.d.ts +6 -0
  62. package/dist/date/core.d.ts +52 -0
  63. package/dist/date/days.d.ts +23 -0
  64. package/{src/date/is.ts → dist/date/is.d.ts} +8 -102
  65. package/dist/date/relative.d.ts +44 -0
  66. package/dist/date/start-end.d.ts +73 -0
  67. package/dist/date/timezone.d.ts +67 -0
  68. package/dist/date/weeks.d.ts +72 -0
  69. package/dist/date.cjs +239 -0
  70. package/dist/date.cjs.map +1 -0
  71. package/dist/date.mjs +241 -0
  72. package/dist/date.mjs.map +1 -0
  73. package/dist/dict.cjs +2 -0
  74. package/dist/dict.cjs.map +1 -0
  75. package/dist/dict.mjs +2 -0
  76. package/dist/dict.mjs.map +1 -0
  77. package/dist/each.cjs +18 -0
  78. package/dist/each.cjs.map +1 -0
  79. package/dist/each.mjs +19 -0
  80. package/dist/each.mjs.map +1 -0
  81. package/dist/easing.cjs +151 -0
  82. package/dist/easing.cjs.map +1 -0
  83. package/dist/easing.d.ts +46 -0
  84. package/dist/easing.mjs +151 -0
  85. package/dist/easing.mjs.map +1 -0
  86. package/dist/emitter.cjs +94 -0
  87. package/dist/emitter.cjs.map +1 -0
  88. package/dist/emitter.d.ts +68 -0
  89. package/dist/emitter.mjs +94 -0
  90. package/dist/emitter.mjs.map +1 -0
  91. package/dist/enum.cjs +58 -0
  92. package/dist/enum.cjs.map +1 -0
  93. package/dist/enum.d.ts +68 -0
  94. package/dist/enum.mjs +58 -0
  95. package/dist/enum.mjs.map +1 -0
  96. package/dist/env.cjs +28 -0
  97. package/dist/env.cjs.map +1 -0
  98. package/{src/env.ts → dist/env.d.ts} +6 -30
  99. package/dist/env.mjs +28 -0
  100. package/dist/env.mjs.map +1 -0
  101. package/dist/error.cjs +12 -0
  102. package/dist/error.cjs.map +1 -0
  103. package/{src/error.ts → dist/error.d.ts} +3 -12
  104. package/dist/error.mjs +12 -0
  105. package/dist/error.mjs.map +1 -0
  106. package/dist/exception.cjs +22 -0
  107. package/dist/exception.cjs.map +1 -0
  108. package/dist/exception.d.ts +31 -0
  109. package/dist/exception.mjs +22 -0
  110. package/dist/exception.mjs.map +1 -0
  111. package/dist/fn.cjs +76 -0
  112. package/dist/fn.cjs.map +1 -0
  113. package/dist/fn.d.ts +102 -0
  114. package/dist/fn.mjs +76 -0
  115. package/dist/fn.mjs.map +1 -0
  116. package/dist/index.cjs +5 -0
  117. package/dist/index.cjs.map +1 -0
  118. package/dist/index.d.ts +1 -0
  119. package/dist/index.mjs +5 -0
  120. package/dist/index.mjs.map +1 -0
  121. package/dist/merge.cjs +87 -0
  122. package/dist/merge.cjs.map +1 -0
  123. package/dist/merge.mjs +88 -0
  124. package/dist/merge.mjs.map +1 -0
  125. package/dist/number.cjs +14 -0
  126. package/dist/number.cjs.map +1 -0
  127. package/dist/number.d.ts +153 -0
  128. package/dist/number.mjs +14 -0
  129. package/dist/number.mjs.map +1 -0
  130. package/{src/object/each.ts → dist/object/each.d.ts} +3 -23
  131. package/dist/object/get-set.d.ts +111 -0
  132. package/dist/object/is.d.ts +32 -0
  133. package/dist/object/merge.d.ts +72 -0
  134. package/{src/object/process.ts → dist/object/process.d.ts} +4 -38
  135. package/dist/object.cjs +130 -0
  136. package/dist/object.cjs.map +1 -0
  137. package/dist/object.mjs +130 -0
  138. package/dist/object.mjs.map +1 -0
  139. package/dist/path.cjs +77 -0
  140. package/dist/path.cjs.map +1 -0
  141. package/dist/path.d.ts +82 -0
  142. package/dist/path.mjs +77 -0
  143. package/dist/path.mjs.map +1 -0
  144. package/dist/promise.cjs +62 -0
  145. package/dist/promise.cjs.map +1 -0
  146. package/{src/promise.ts → dist/promise.d.ts} +6 -67
  147. package/dist/promise.mjs +62 -0
  148. package/dist/promise.mjs.map +1 -0
  149. package/dist/qs.cjs +47 -0
  150. package/dist/qs.cjs.map +1 -0
  151. package/{src/qs.ts → dist/qs.d.ts} +3 -60
  152. package/dist/qs.mjs +47 -0
  153. package/dist/qs.mjs.map +1 -0
  154. package/dist/regexp.cjs +66 -0
  155. package/dist/regexp.cjs.map +1 -0
  156. package/dist/regexp.d.ts +65 -0
  157. package/dist/regexp.mjs +66 -0
  158. package/dist/regexp.mjs.map +1 -0
  159. package/dist/string.cjs +16 -0
  160. package/dist/string.cjs.map +1 -0
  161. package/dist/string.d.ts +80 -0
  162. package/dist/string.mjs +16 -0
  163. package/dist/string.mjs.map +1 -0
  164. package/dist/string2.cjs +157 -0
  165. package/dist/string2.cjs.map +1 -0
  166. package/dist/string2.mjs +158 -0
  167. package/dist/string2.mjs.map +1 -0
  168. package/dist/time/from.d.ts +14 -0
  169. package/dist/time/to.d.ts +38 -0
  170. package/dist/time.cjs +82 -0
  171. package/dist/time.cjs.map +1 -0
  172. package/dist/time.mjs +82 -0
  173. package/dist/time.mjs.map +1 -0
  174. package/dist/timer.cjs +119 -0
  175. package/dist/timer.cjs.map +1 -0
  176. package/dist/timer.d.ts +96 -0
  177. package/{src/timer.ts → dist/timer.mjs} +17 -124
  178. package/dist/timer.mjs.map +1 -0
  179. package/dist/tree.cjs +125 -0
  180. package/dist/tree.cjs.map +1 -0
  181. package/{src/tree.ts → dist/tree.d.ts} +41 -225
  182. package/dist/tree.mjs +125 -0
  183. package/dist/tree.mjs.map +1 -0
  184. package/dist/type.cjs +78 -0
  185. package/dist/type.cjs.map +1 -0
  186. package/{src/type.ts → dist/type.d.ts} +20 -96
  187. package/dist/type.mjs +78 -0
  188. package/dist/type.mjs.map +1 -0
  189. package/dist/types.cjs +2 -0
  190. package/dist/types.cjs.map +1 -0
  191. package/{src/types.ts → dist/types.d.ts} +12 -33
  192. package/dist/types.mjs +2 -0
  193. package/dist/types.mjs.map +1 -0
  194. package/dist/unique.cjs +46 -0
  195. package/dist/unique.cjs.map +1 -0
  196. package/dist/unique.d.ts +22 -0
  197. package/dist/unique.mjs +46 -0
  198. package/dist/unique.mjs.map +1 -0
  199. package/dist/url.cjs +37 -0
  200. package/dist/url.cjs.map +1 -0
  201. package/dist/url.d.ts +53 -0
  202. package/dist/url.mjs +37 -0
  203. package/dist/url.mjs.map +1 -0
  204. package/dist/version.cjs +33 -0
  205. package/dist/version.cjs.map +1 -0
  206. package/dist/version.d.ts +32 -0
  207. package/dist/version.mjs +33 -0
  208. package/dist/version.mjs.map +1 -0
  209. package/package.json +8 -2
  210. package/CHANGELOG.md +0 -52
  211. package/src/array.ts +0 -312
  212. package/src/async.ts +0 -379
  213. package/src/base64.ts +0 -20
  214. package/src/cache.ts +0 -146
  215. package/src/color/distance.ts +0 -28
  216. package/src/color/helpers.ts +0 -23
  217. package/src/color/hex-hsl.ts +0 -11
  218. package/src/color/hex-rgb.ts +0 -39
  219. package/src/color/rgb-hsl.ts +0 -53
  220. package/src/color/rgb-hwb.ts +0 -56
  221. package/src/color/rgb-whiter.ts +0 -22
  222. package/src/color/rgb-xyz.ts +0 -62
  223. package/src/crypto/md5.mjs +0 -357
  224. package/src/crypto/sha1.mjs +0 -300
  225. package/src/crypto/sha256.mjs +0 -310
  226. package/src/crypto/sha512.mjs +0 -459
  227. package/src/date/const.ts +0 -6
  228. package/src/date/core.ts +0 -162
  229. package/src/date/days.ts +0 -51
  230. package/src/date/relative.ts +0 -92
  231. package/src/date/start-end.ts +0 -246
  232. package/src/date/timezone.ts +0 -220
  233. package/src/date/weeks.ts +0 -100
  234. package/src/dts/global.d.ts +0 -27
  235. package/src/easing.ts +0 -166
  236. package/src/emitter.ts +0 -117
  237. package/src/enum.ts +0 -171
  238. package/src/exception.ts +0 -68
  239. package/src/fn.ts +0 -197
  240. package/src/index.ts +0 -1
  241. package/src/number.ts +0 -236
  242. package/src/object/get-set.ts +0 -273
  243. package/src/object/is.ts +0 -128
  244. package/src/object/merge.ts +0 -180
  245. package/src/path.ts +0 -188
  246. package/src/regexp.ts +0 -156
  247. package/src/string.ts +0 -146
  248. package/src/time/from.ts +0 -57
  249. package/src/time/to.ts +0 -106
  250. package/src/unique.ts +0 -77
  251. package/src/url.ts +0 -93
  252. package/src/version.ts +0 -71
  253. package/test/array.test.ts +0 -332
  254. package/test/async-real.test.ts +0 -39
  255. package/test/async.test.ts +0 -375
  256. package/test/base64.test.ts +0 -32
  257. package/test/cache.test.ts +0 -83
  258. package/test/color.test.ts +0 -163
  259. package/test/crypto.test.ts +0 -34
  260. package/test/date-tz.test.ts +0 -206
  261. package/test/date.test.ts +0 -353
  262. package/test/easing.test.ts +0 -33
  263. package/test/emitter.test.ts +0 -71
  264. package/test/enum.test.ts +0 -113
  265. package/test/env.test.ts +0 -69
  266. package/test/error.test.ts +0 -58
  267. package/test/exception.test.ts +0 -43
  268. package/test/fn.test.ts +0 -263
  269. package/test/helpers.ts +0 -23
  270. package/test/index.test.ts +0 -6
  271. package/test/number.test.ts +0 -213
  272. package/test/object.test.ts +0 -309
  273. package/test/path.test.ts +0 -156
  274. package/test/promise.test.ts +0 -199
  275. package/test/qs.test.ts +0 -79
  276. package/test/regexp.test.ts +0 -97
  277. package/test/string.test.ts +0 -150
  278. package/test/time.test.ts +0 -214
  279. package/test/timer.test.ts +0 -114
  280. package/test/tree.test.ts +0 -348
  281. package/test/type.test.ts +0 -226
  282. package/test/unique.test.ts +0 -71
  283. package/test/url.test.ts +0 -136
  284. package/test/version.test.ts +0 -52
  285. package/tsconfig.json +0 -31
  286. package/vite.config.mts +0 -114
  287. /package/{src/color.ts → dist/color.d.ts} +0 -0
  288. /package/{src/date.ts → dist/date.d.ts} +0 -0
  289. /package/{src/dict.ts → dist/dict.d.ts} +0 -0
  290. /package/{src/object.ts → dist/object.d.ts} +0 -0
  291. /package/{src/time.ts → dist/time.d.ts} +0 -0
@@ -1,92 +0,0 @@
1
- import { stringFormat } from '@/string';
2
- import { isArray } from '@/type';
3
- import { type TDateValue, dateFormat, dateParse } from './core';
4
-
5
- export type TDateRelativeTemplate = [
6
- number /*单位时间差,为 0 表示不计算单位差值,单位秒*/,
7
- number /*最大时间差,单位:秒*/,
8
- string /*过去模板字符串,%d 表述单位差值*/,
9
- string? /*将来模板字符串,%d 表述单位差值,可选*/,
10
- ];
11
- export type TDateRelativeTemplates = TDateRelativeTemplate[];
12
-
13
- const defaultDiffTemplates: TDateRelativeTemplates = [
14
- [0, 10, '刚刚'],
15
- [1, 60, '{n} 秒前', '{n} 秒后'],
16
- [60, 60 * 60, '{n} 分钟前', '{n} 分钟后'],
17
- [60 * 60, 60 * 60 * 24, '{n} 小时前', '{n} 小时后'],
18
- [0, 60 * 60 * 24 * 2, '昨天', '明天'],
19
- [0, 60 * 60 * 24 * 3, '前天', '后天'],
20
- [60 * 60 * 24, 60 * 60 * 24 * 30, '{n} 天前', '{n} 天后'],
21
- [0, Number.POSITIVE_INFINITY, 'YYYY年MM月DD日'],
22
- ];
23
-
24
- /**
25
- * 相对时间
26
- * @param {TDateValue} dateValue 比较的时间
27
- * @param {TDateValue} [refDateValue] 相对的时间,默认为当前
28
- * @param {TDateRelativeTemplates} [templates] 模板
29
- * @returns {string} 格式化后的相对时间字符串
30
- * @example
31
- * ```typescript
32
- * // 默认模板
33
- * dateRelative(new Date('2023-01-01')); // '刚刚'
34
- * dateRelative(new Date('2023-01-01'), new Date('2023-01-02')); // '昨天'
35
- * dateRelative(new Date('2023-01-01'), new Date('2023-01-04')); // '3 天前'
36
- * dateRelative(new Date('2023-01-01'), new Date('2023-02-01')); // '2023年01月01日'
37
- * ```
38
- * @example
39
- * ```typescript
40
- * // 自定义模板
41
- * const templates: DateRelativeTemplates = [
42
- * [0, 10, '刚刚'],
43
- * [1, 60, '{n} 秒前', '{n} 秒后'],
44
- * [60, 60 * 60, '{n} 分钟前', '{n} 分钟后'],
45
- * [60 * 60, 60 * 60 * 24, '{n} 小时前', '{n} 小时后'],
46
- * [0, 60 * 60 * 24 * 2, '昨天', '明天'],
47
- * [0, 60 * 60 * 24 * 3, '前天', '后天'],
48
- * [60 * 60 * 24, 60 * 60 * 24 * 30, '{n} 天前', '{n} 天后'],
49
- * [0, Number.POSITIVE_INFINITY, 'YYYY年MM月DD日'],
50
- * ];
51
- * dateRelative(new Date('2023-01-01'), new Date('2023-01-02'), templates); // '昨天'
52
- * dateRelative(new Date('2023-01-01'), new Date('2023-01-04'), templates); // '3 天前'
53
- * dateRelative(new Date('2023-01-01'), new Date('2023-02-01'), templates); // '2023年01月01日'
54
- * ```
55
- */
56
- export function dateRelative(
57
- dateValue: TDateValue,
58
- refDateValue: TDateValue,
59
- templates: TDateRelativeTemplates,
60
- ): string;
61
- export function dateRelative(dateValue: TDateValue, refDateValue: TDateValue): string;
62
- export function dateRelative(dateValue: TDateValue, templates: TDateRelativeTemplates): string;
63
- export function dateRelative(dateValue: TDateValue): string;
64
- export function dateRelative(
65
- dateValue: TDateValue,
66
- refDateValue?: TDateValue | TDateRelativeTemplates,
67
- templates?: TDateRelativeTemplates,
68
- ): string {
69
- const now = Date.now();
70
- const refDateValueFinal = isArray(refDateValue) ? now : refDateValue || now;
71
- const templatesFinal = isArray(templates) ? templates : isArray(refDateValue) ? refDateValue : defaultDiffTemplates;
72
- const d1 = dateParse(dateValue);
73
- const d2 = dateParse(refDateValueFinal);
74
- const diff = d1.getTime() - d2.getTime();
75
- const isAgo = diff < 0;
76
- const absDiff = Math.abs(diff);
77
- let relative = '';
78
-
79
- for (const [base, max, agoTemplate, featureTemplate] of templatesFinal) {
80
- const unitFinal = base * 1000;
81
- const maxFinal = max * 1000;
82
-
83
- if (absDiff < maxFinal) {
84
- const template = isAgo ? agoTemplate : featureTemplate || agoTemplate;
85
- const length = unitFinal === 0 ? 0 : Math.max(Math.floor(absDiff / unitFinal), 1);
86
- relative = unitFinal === 0 ? dateFormat(dateValue, template) : stringFormat(template, { n: length });
87
- break;
88
- }
89
- }
90
-
91
- return relative;
92
- }
@@ -1,246 +0,0 @@
1
- import { type TDateLike, type TDateValue, dateParse } from './core';
2
-
3
- /**
4
- * 时间单位符号枚举
5
- * - 'Y': 年
6
- * - 'M': 月
7
- * - 'D': 天
8
- * - 'W': 周
9
- * - 'h': 小时
10
- * - 'm': 分钟
11
- * - 's': 秒
12
- */
13
- type _TDateOfSymbol = 'Y' | 'M' | 'D' | 'W' | 'h' | 'm' | 's';
14
-
15
- /**
16
- * 各时间单位起始时间映射表
17
- * 包含将日期设置到单位起始时间的函数
18
- */
19
- const dateOfStartMap: [_TDateOfSymbol, (date: TDateLike) => unknown][] = [
20
- ['s', (d) => d.setMilliseconds(0)],
21
- ['m', (d) => d.setSeconds(0)],
22
- ['h', (d) => d.setMinutes(0)],
23
- ['D', (d) => d.setHours(0)],
24
- ['W', (d) => d.setHours(0)],
25
- ['M', (d) => d.setDate(1)],
26
- ['Y', (d) => d.setMonth(0)],
27
- ];
28
-
29
- /**
30
- * 返回指定时间单位的起始时间
31
- * @param dateValue - 可以是数值、字符串或 Date 对象
32
- * @param symbol - 时间单位符号,可选值为 'Y'(年)、'M'(月)、'D'(天)、'h'(小时)、'm'(分钟)、's'(秒),默认为 'D'
33
- * @returns 返回指定时间单位的起始时间
34
- * @example
35
- * ```typescript
36
- * const date = new Date(2023, 5, 15, 12, 30, 45, 500); // 2023-06-15 12:30:45.500
37
- *
38
- * // 返回秒级起始时间
39
- * dateOfStart(date, 's'); // 2023-06-15 12:30:45.000
40
- *
41
- * // 返回分钟级起始时间
42
- * dateOfStart(date, 'm'); // 2023-06-15 12:30:00.000
43
- *
44
- * // 返回小时级起始时间
45
- * dateOfStart(date, 'h'); // 2023-06-15 12:00:00.000
46
- *
47
- * // 返回天级起始时间
48
- * dateOfStart(date, 'D'); // 2023-06-15 00:00:00.000
49
- *
50
- * // 返回月级起始时间
51
- * dateOfStart(date, 'M'); // 2023-06-01 00:00:00.000
52
- *
53
- * // 返回年级起始时间
54
- * dateOfStart(date, 'Y'); // 2023-01-01 00:00:00.000
55
- *
56
- * // 默认返回天级起始时间
57
- * dateOfStart(date); // 2023-06-15 00:00:00.000
58
- * ```
59
- */
60
- function _dateStart(dateValue: TDateValue, symbol: _TDateOfSymbol = 'D') {
61
- const date = dateParse(dateValue);
62
-
63
- for (const [sym, fn] of dateOfStartMap) {
64
- fn(date);
65
- if (symbol === sym) break;
66
- }
67
-
68
- return date;
69
- }
70
-
71
- /**
72
- * 返回秒级起始时间
73
- * @param dateValue - 可以是数值、字符串或 Date 对象
74
- * @returns 返回秒级起始时间,毫秒部分为 0
75
- */
76
- export function dateStartInSecond(dateValue: TDateValue) {
77
- return _dateStart(dateValue, 's');
78
- }
79
-
80
- /**
81
- * 返回分钟级起始时间
82
- * @param dateValue - 可以是数值、字符串或 Date 对象
83
- * @returns 返回分钟级起始时间,秒和毫秒部分为 0
84
- */
85
- export function dateStartInMinute(dateValue: TDateValue) {
86
- return _dateStart(dateValue, 'm');
87
- }
88
-
89
- /**
90
- * 返回小时级起始时间
91
- * @param dateValue - 可以是数值、字符串或 Date 对象
92
- * @returns 返回小时级起始时间,分钟、秒和毫秒部分为 0
93
- */
94
- export function dateStartInHour(dateValue: TDateValue) {
95
- return _dateStart(dateValue, 'h');
96
- }
97
-
98
- /**
99
- * 返回天级起始时间
100
- * @param dateValue - 可以是数值、字符串或 Date 对象
101
- * @returns 返回天级起始时间,小时、分钟、秒和毫秒部分为 0
102
- */
103
- export function dateStartInDay(dateValue: TDateValue) {
104
- return _dateStart(dateValue, 'D');
105
- }
106
-
107
- /**
108
- * 返回月级起始时间
109
- * @param dateValue - 可以是数值、字符串或 Date 对象
110
- * @returns 返回月级起始时间,日期为当月第一天,时间部分为 0
111
- */
112
- export function dateStartInMonth(dateValue: TDateValue) {
113
- return _dateStart(dateValue, 'M');
114
- }
115
-
116
- /**
117
- * 返回年级起始时间
118
- * @param dateValue - 可以是数值、字符串或 Date 对象
119
- * @returns 返回年级起始时间,月份为 1 月,日期为 1 日,时间部分为 0
120
- */
121
- export function dateStartInYear(dateValue: TDateValue) {
122
- return _dateStart(dateValue, 'Y');
123
- }
124
-
125
- /**
126
- * 各时间单位结束时间映射表
127
- * 包含将日期设置到单位结束时间的函数
128
- */
129
- const dateOfEndMap: [_TDateOfSymbol, (date: TDateLike) => unknown][] = [
130
- ['s', (d) => d.setMilliseconds(999)],
131
- ['m', (d) => d.setSeconds(59)],
132
- ['h', (d) => d.setMinutes(59)],
133
- ['D', (d) => d.setHours(23)],
134
- [
135
- 'M',
136
- (d) => {
137
- const d2 = dateParse(d);
138
- d2.setMonth(d.getMonth() + 1);
139
- d2.setDate(0);
140
- d.setDate(d2.getDate());
141
- },
142
- ],
143
- [
144
- 'Y',
145
- (d) => {
146
- d.setMonth(11);
147
- d.setDate(31);
148
- },
149
- ],
150
- ];
151
-
152
- /**
153
- * 返回指定时间单位的结束时间
154
- * @param dateValue - 可以是数值、字符串或 Date 对象
155
- * @param symbol - 时间单位符号,可选值为 'Y'(年)、'M'(月)、'D'(天)、'h'(小时)、'm'(分钟)、's'(秒),默认为 'D'
156
- * @returns 返回指定时间单位的结束时间
157
- * @example
158
- * ```typescript
159
- * const date = new Date(2023, 5, 15, 12, 30, 45, 500); // 2023-06-15 12:30:45.500
160
- *
161
- * // 返回秒级结束时间
162
- * dateOfEnd(date, 's'); // 2023-06-15 12:30:45.999
163
- *
164
- * // 返回分钟级结束时间
165
- * dateOfEnd(date, 'm'); // 2023-06-15 12:30:59.999
166
- *
167
- * // 返回小时级结束时间
168
- * dateOfEnd(date, 'h'); // 2023-06-15 12:59:59.999
169
- *
170
- * // 返回天级结束时间
171
- * dateOfEnd(date, 'D'); // 2023-06-15 23:59:59.999
172
- *
173
- * // 返回月级结束时间
174
- * dateOfEnd(date, 'M'); // 2023-06-30 23:59:59.999
175
- *
176
- * // 返回年级结束时间
177
- * dateOfEnd(date, 'Y'); // 2023-12-31 23:59:59.999
178
- *
179
- * // 默认返回天级结束时间
180
- * dateOfEnd(date); // 2023-06-15 23:59:59.999
181
- * ```
182
- */
183
- function _dateEnd(dateValue: TDateValue, symbol: _TDateOfSymbol = 'D') {
184
- const date = dateParse(dateValue);
185
-
186
- for (const [sym, fn] of dateOfEndMap) {
187
- fn(date);
188
- if (symbol === sym) break;
189
- }
190
-
191
- return date;
192
- }
193
-
194
- /**
195
- * 返回秒级结束时间
196
- * @param dateValue - 可以是数值、字符串或 Date 对象
197
- * @returns 返回秒级结束时间,毫秒部分为 999
198
- */
199
- export function dateEndInSecond(dateValue: TDateValue) {
200
- return _dateEnd(dateValue, 's');
201
- }
202
-
203
- /**
204
- * 返回分钟级结束时间
205
- * @param dateValue - 可以是数值、字符串或 Date 对象
206
- * @returns 返回分钟级结束时间,秒为 59,毫秒为 999
207
- */
208
- export function dateEndInMinute(dateValue: TDateValue) {
209
- return _dateEnd(dateValue, 'm');
210
- }
211
-
212
- /**
213
- * 返回小时级结束时间
214
- * @param dateValue - 可以是数值、字符串或 Date 对象
215
- * @returns 返回小时级结束时间,分钟为 59,秒为 59,毫秒为 999
216
- */
217
- export function dateEndInHour(dateValue: TDateValue) {
218
- return _dateEnd(dateValue, 'h');
219
- }
220
-
221
- /**
222
- * 返回天级结束时间
223
- * @param dateValue - 可以是数值、字符串或 Date 对象
224
- * @returns 返回天级结束时间,小时为 23,分钟为 59,秒为 59,毫秒为 999
225
- */
226
- export function dateEndInDay(dateValue: TDateValue) {
227
- return _dateEnd(dateValue, 'D');
228
- }
229
-
230
- /**
231
- * 返回月级结束时间
232
- * @param dateValue - 可以是数值、字符串或 Date 对象
233
- * @returns 返回月级结束时间,日期为当月最后一天,时间为 23:59:59.999
234
- */
235
- export function dateEndInMonth(dateValue: TDateValue) {
236
- return _dateEnd(dateValue, 'M');
237
- }
238
-
239
- /**
240
- * 返回年级结束时间
241
- * @param dateValue - 可以是数值、字符串或 Date 对象
242
- * @returns 返回年级结束时间,月份为 12 月,日期为 31 日,时间为 23:59:59.999
243
- */
244
- export function dateEndInYear(dateValue: TDateValue) {
245
- return _dateEnd(dateValue, 'Y');
246
- }
@@ -1,220 +0,0 @@
1
- import { isNumber } from '../type';
2
- import { dateFormat } from './core';
3
-
4
- export type TTzDateOptions = {
5
- /**
6
- * 时间戳
7
- * @default Date.now()
8
- */
9
- timestamp?: number;
10
-
11
- /**
12
- * 日期值
13
- */
14
- value?: readonly [
15
- year?: number,
16
- month?: number,
17
- day?: number,
18
- hours?: number,
19
- minutes?: number,
20
- seconds?: number,
21
- milliseconds?: number,
22
- ];
23
-
24
- /**
25
- * 时区偏移量,单位为分钟,默认为当前时区
26
- */
27
- offset?: number;
28
- };
29
-
30
- const TZ_OFFSET_MS = 60 * 1000;
31
-
32
- export class TzDate {
33
- #timestamp: number;
34
- #targetDate: Date;
35
- #utcDate: Date;
36
-
37
- #localTZOffset = TzDate.getOffset();
38
- #localTzOffsetMS = this.#localTZOffset * TZ_OFFSET_MS;
39
-
40
- #targetTzOffset = 0;
41
- #targetTzOffsetMS = 0;
42
-
43
- #options: TTzDateOptions;
44
-
45
- constructor(options?: TTzDateOptions | TzDate) {
46
- this.#options = (options instanceof TzDate ? options.#options : options) || {};
47
- const { offset, timestamp, value } = this.#options;
48
- this.#targetTzOffset = isNumber(offset) ? offset : this.#localTZOffset;
49
- this.#targetTzOffsetMS = this.#targetTzOffset * TZ_OFFSET_MS;
50
-
51
- if (Array.isArray(value) && value.length > 0) {
52
- const [fullYear, month, day, hours, minutes, seconds, milliseconds] = value;
53
- const timestamp = Date.UTC(
54
- fullYear ?? 0,
55
- month ?? 0,
56
- day ?? 1,
57
- hours ?? 0,
58
- minutes ?? 0,
59
- seconds ?? 0,
60
- milliseconds ?? 0,
61
- );
62
-
63
- this.#timestamp = timestamp + this.#targetTzOffsetMS;
64
- } else {
65
- this.#timestamp = timestamp || Date.now();
66
- }
67
-
68
- this.#targetDate = new Date(this.#timestamp + this.#localTzOffsetMS - this.#targetTzOffsetMS);
69
- this.#utcDate = new Date(this.#timestamp + this.#localTzOffsetMS);
70
- }
71
-
72
- #updateTimestamp() {
73
- this.#timestamp = this.#targetDate.getTime() + this.#targetTzOffsetMS - this.#localTzOffsetMS;
74
- this.#utcDate = new Date(this.#timestamp + this.#localTzOffsetMS);
75
- }
76
-
77
- getTimezoneOffset() {
78
- return this.#targetTzOffset;
79
- }
80
-
81
- getTimezoneOrder() {
82
- return TzDate.getOrder(this.#targetTzOffset);
83
- }
84
-
85
- getFullYear() {
86
- return this.#targetDate.getFullYear();
87
- }
88
-
89
- getMonth() {
90
- return this.#targetDate.getMonth();
91
- }
92
-
93
- getDate() {
94
- return this.#targetDate.getDate();
95
- }
96
-
97
- getHours() {
98
- return this.#targetDate.getHours();
99
- }
100
-
101
- getMinutes() {
102
- return this.#targetDate.getMinutes();
103
- }
104
-
105
- getSeconds() {
106
- return this.#targetDate.getSeconds();
107
- }
108
-
109
- getMilliseconds() {
110
- return this.#targetDate.getMilliseconds();
111
- }
112
-
113
- setFullYear(year: number, month?: number, date?: number) {
114
- this.#targetDate.setFullYear(year);
115
- this.#updateTimestamp();
116
-
117
- if (isNumber(month)) this.setMonth(month);
118
- if (isNumber(date)) this.setDate(date);
119
-
120
- return this.getTime();
121
- }
122
-
123
- setMonth(month: number, date?: number) {
124
- this.#targetDate.setMonth(month);
125
- this.#updateTimestamp();
126
-
127
- if (isNumber(date)) this.setDate(date);
128
-
129
- return this.getTime();
130
- }
131
-
132
- setDate(date: number) {
133
- this.#targetDate.setDate(date);
134
- this.#updateTimestamp();
135
-
136
- return this.getTime();
137
- }
138
-
139
- setHours(hours: number, minutes?: number, seconds?: number, milliseconds?: number) {
140
- this.#targetDate.setHours(hours);
141
- this.#updateTimestamp();
142
-
143
- if (isNumber(minutes)) this.setMinutes(minutes);
144
- if (isNumber(seconds)) this.setSeconds(seconds);
145
- if (isNumber(milliseconds)) this.setMilliseconds(milliseconds);
146
-
147
- return this.getTime();
148
- }
149
-
150
- setMinutes(minutes: number, seconds?: number, milliseconds?: number) {
151
- this.#targetDate.setMinutes(minutes);
152
- this.#updateTimestamp();
153
-
154
- if (isNumber(seconds)) this.setSeconds(seconds);
155
- if (isNumber(milliseconds)) this.setMilliseconds(milliseconds);
156
-
157
- return this.getTime();
158
- }
159
-
160
- setSeconds(seconds: number, milliseconds?: number) {
161
- this.#targetDate.setSeconds(seconds);
162
- this.#updateTimestamp();
163
-
164
- if (isNumber(milliseconds)) this.setMilliseconds(milliseconds);
165
-
166
- return this.getTime();
167
- }
168
-
169
- setMilliseconds(milliseconds: number) {
170
- this.#targetDate.setMilliseconds(milliseconds);
171
- this.#updateTimestamp();
172
-
173
- return this.getTime();
174
- }
175
-
176
- getTime() {
177
- return this.#timestamp;
178
- }
179
-
180
- getDay() {
181
- return this.#targetDate.getDay();
182
- }
183
-
184
- toISOString() {
185
- return dateFormat(this.#utcDate, 'YYYY-MM-DDTHH:mm:ss.SSSZ');
186
- }
187
-
188
- /**
189
- * 创建一个 TzDate 对象
190
- * @param td - 需要转换的日期对象
191
- * @param offset - 目标时区分钟偏移量,默认为当前时区
192
- * @returns 返回一个 TzDate 对象
193
- * @example
194
- * ```js
195
- * const tzDate = TzDate.from(new TzDate());
196
- * ```
197
- */
198
- static from(td: TzDate, offset = TzDate.getOffset()) {
199
- return new TzDate({
200
- offset: offset,
201
- timestamp: td.getTime(),
202
- });
203
- }
204
-
205
- /**
206
- * 获取时区序号
207
- * @param offset - 默认使用当前时区分钟偏移量
208
- */
209
- static getOrder(offset = TzDate.getOffset()) {
210
- return offset / -60;
211
- }
212
-
213
- /**
214
- * 获取时区分钟偏移量
215
- * @param gmtOrder - 默认使用当前时区序号
216
- */
217
- static getOffset(gmtOrder?: number) {
218
- return isNumber(gmtOrder) ? gmtOrder * -60 : new Date().getTimezoneOffset();
219
- }
220
- }
package/src/date/weeks.ts DELETED
@@ -1,100 +0,0 @@
1
- import { DATE_DAY_MS } from './const';
2
- import { type TDateValue, dateParse } from './core';
3
-
4
- export enum EWeekStart {
5
- /**
6
- * 周日作为一周的起始日
7
- */
8
- sunday = 0,
9
- /**
10
- * 周一作为一周的起始日
11
- */
12
- monday = 1,
13
- /**
14
- * 周二作为一周的起始日
15
- */
16
- tuesday = 2,
17
- /**
18
- * 周三作为一周的起始日
19
- */
20
- wednesday = 3,
21
- /**
22
- * 周四作为一周的起始日
23
- */
24
- thursday = 4,
25
- /**
26
- * 周五作为一周的起始日
27
- */
28
- friday = 5,
29
- /**
30
- * 周六作为一周的起始日
31
- */
32
- saturday = 6,
33
- // /**
34
- // * 1号所在的周为第一周
35
- // */
36
- // firstDate = 7,
37
- // /**
38
- // * 完整7天表示第一周
39
- // */
40
- // firstFullWeek = 8,
41
- }
42
-
43
- /**
44
- * 计算指定日期所在年份或月份的周数
45
- * @param dateValue - 可以是数值、字符串或 Date 对象
46
- * @param type - 计算范围,'Y' 表示年份,'M' 表示月份
47
- * @param weekStart - 一周的起始日,默认为 0(周日)
48
- * @returns 返回指定日期所在年份或月份的周数
49
- * @example
50
- * ```typescript
51
- * const date = new Date(2023, 0, 1); // 2023-01-01
52
- * _dateWeeks(date, 'Y'); // 1 (计算年份的周数)
53
- * _dateWeeks(date, 'M'); // 1 (计算月份的周数)
54
- * _dateWeeks(date, 'Y', 1); // 1 (周一作为一周的起始日,计算年份的周数)
55
- * ```
56
- */
57
- export function _dateWeeks(dateValue: TDateValue, type: 'Y' | 'M', weekStart: EWeekStart = 0) {
58
- const date = dateParse(dateValue);
59
-
60
- const year = date.getFullYear();
61
- const month = date.getMonth();
62
-
63
- const firstDate = type === 'Y' ? new Date(year, 0, 1) : new Date(year, month, 1);
64
- const firstWeek = firstDate.getDay();
65
- const days = Math.ceil((date.getTime() - firstDate.getTime()) / DATE_DAY_MS);
66
-
67
- return Math.ceil((firstWeek + days - weekStart) / 7);
68
- }
69
-
70
- /**
71
- * 计算指定日期所在年份的周数
72
- * @param dateValue - 可以是数值、字符串或 Date 对象
73
- * @param weekStart - 一周的起始日,默认为 0(周日)
74
- * @returns 返回指定日期所在年份的周数
75
- * @example
76
- * ```typescript
77
- * const date = new Date(2023, 0, 1); // 2023-01-01
78
- * weeksOfYear(date); // 1
79
- * weeksOfYear(date, 1); // 1 (周一作为一周的起始日)
80
- * ```
81
- */
82
- export function weeksOfYear(dateValue: TDateValue, weekStart: EWeekStart = 0) {
83
- return _dateWeeks(dateValue, 'Y', weekStart);
84
- }
85
-
86
- /**
87
- * 计算指定日期所在月份的周数
88
- * @param dateValue - 可以是数值、字符串或 Date 对象
89
- * @param weekStart - 一周的起始日,默认为 0(周日)
90
- * @returns 返回指定日期所在月份的周数
91
- * @example
92
- * ```typescript
93
- * const date = new Date(2023, 0, 1); // 2023-01-01
94
- * weeksOfMonth(date); // 1
95
- * weeksOfMonth(date, 1); // 1 (周一作为一周的起始日)
96
- * ```
97
- */
98
- export function weeksOfMonth(dateValue: TDateValue, weekStart: EWeekStart = 0) {
99
- return _dateWeeks(dateValue, 'M', weekStart);
100
- }
@@ -1,27 +0,0 @@
1
- /**
2
- * @file global.d.ts
3
- */
4
-
5
- /**
6
- * package.json name
7
- */
8
- declare const PKG_NAME: string;
9
-
10
- /**
11
- * package.json version
12
- */
13
- declare const PKG_VERSION: string;
14
-
15
- /**
16
- * package.json description
17
- */
18
- declare const PKG_DESCRIPTION: string;
19
-
20
- declare const IS_TEST: string;
21
-
22
- interface TEST_MOCK {
23
- IS_BROWSER: boolean;
24
- IS_NODE: boolean;
25
- }
26
-
27
- declare const TEST_MOCK: TEST_MOCK;