@allkit/shared 0.0.4 → 0.0.5

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 (67) hide show
  1. package/package.json +21 -26
  2. package/dist/README.md +0 -1
  3. package/dist/package.json +0 -21
  4. package/dist/skills/shared/SKILL.md +0 -240
  5. package/dist/skills/shared/examples/usage.ts +0 -88
  6. package/dist/skills/shared/references/clipboard.md +0 -39
  7. package/dist/skills/shared/references/cloneDeep.md +0 -60
  8. package/dist/skills/shared/references/cookie.md +0 -56
  9. package/dist/skills/shared/references/date.md +0 -466
  10. package/dist/skills/shared/references/device.md +0 -138
  11. package/dist/skills/shared/references/element.md +0 -99
  12. package/dist/skills/shared/references/is.md +0 -415
  13. package/dist/skills/shared/references/lodash.md +0 -472
  14. package/dist/skills/shared/references/number.md +0 -248
  15. package/dist/skills/shared/references/storage.md +0 -113
  16. package/dist/skills/shared/references/string.md +0 -126
  17. package/dist/skills/shared/references/timer.md +0 -78
  18. package/eslint.config.js +0 -10
  19. package/scripts/build.mjs +0 -95
  20. package/src/clipboard/index.ts +0 -26
  21. package/src/cloneDeep/__test__/cloneDeep.test.ts +0 -92
  22. package/src/cloneDeep/index.ts +0 -168
  23. package/src/constants.ts +0 -27
  24. package/src/cookie/index.ts +0 -44
  25. package/src/date/__test__/date-diff.test.ts +0 -23
  26. package/src/date/__test__/date-duration.test.ts +0 -140
  27. package/src/date/__test__/date-from.test.ts +0 -64
  28. package/src/date/__test__/date.test.ts +0 -67
  29. package/src/date/index.ts +0 -331
  30. package/src/device/__test__/device.test.ts +0 -138
  31. package/src/device/index.ts +0 -125
  32. package/src/element/index.ts +0 -100
  33. package/src/index.ts +0 -14
  34. package/src/is/__test__/is.test.ts +0 -320
  35. package/src/is/index.ts +0 -293
  36. package/src/lodash/__test__/lodash.test.ts +0 -111
  37. package/src/lodash/__test__/obj-string.test.ts +0 -107
  38. package/src/lodash/__test__/uniqueId.test.ts +0 -40
  39. package/src/lodash/index.ts +0 -396
  40. package/src/number/__test__/number.test.ts +0 -137
  41. package/src/number/index.ts +0 -161
  42. package/src/storage/__test__/storage.test.ts +0 -44
  43. package/src/storage/index.ts +0 -185
  44. package/src/string/__test__/string.test.ts +0 -24
  45. package/src/string/index.ts +0 -49
  46. package/src/timer/index.ts +0 -15
  47. package/tsconfig.json +0 -25
  48. package/types/global.d.ts +0 -13
  49. package/vite.config.ts +0 -16
  50. package/vitest.config.ts +0 -28
  51. /package/{dist/clipboard → clipboard}/index.d.ts +0 -0
  52. /package/{dist/cloneDeep → cloneDeep}/index.d.ts +0 -0
  53. /package/{dist/constants.d.ts → constants.d.ts} +0 -0
  54. /package/{dist/cookie → cookie}/index.d.ts +0 -0
  55. /package/{dist/date → date}/index.d.ts +0 -0
  56. /package/{dist/device → device}/index.d.ts +0 -0
  57. /package/{dist/element → element}/index.d.ts +0 -0
  58. /package/{dist/index.d.ts → index.d.ts} +0 -0
  59. /package/{dist/is → is}/index.d.ts +0 -0
  60. /package/{dist/lodash → lodash}/index.d.ts +0 -0
  61. /package/{dist/number → number}/index.d.ts +0 -0
  62. /package/{dist/shared.es.d.ts → shared.es.d.ts} +0 -0
  63. /package/{dist/shared.es.js → shared.es.js} +0 -0
  64. /package/{dist/shared.umd.js → shared.umd.js} +0 -0
  65. /package/{dist/storage → storage}/index.d.ts +0 -0
  66. /package/{dist/string → string}/index.d.ts +0 -0
  67. /package/{dist/timer → timer}/index.d.ts +0 -0
package/src/constants.ts DELETED
@@ -1,27 +0,0 @@
1
- /**
2
- * 普通是与否枚举
3
- */
4
- export enum EnumYesNo {
5
- /**
6
- * 是('1')
7
- */
8
- YES = 1,
9
- /**
10
- * 否('0')
11
- */
12
- NO = 0,
13
- }
14
-
15
- /**
16
- * 普通是与否枚举(10,20)
17
- */
18
- export enum EnumYesNoPlus {
19
- /**
20
- * 是('10')
21
- */
22
- YES = '10',
23
- /**
24
- * 否('20')
25
- */
26
- NO = '20',
27
- }
@@ -1,44 +0,0 @@
1
- import Cookies from 'js-cookie'
2
-
3
- /**
4
- * 设置cookie
5
- * @param name - cookie的key
6
- * @param value - cookie的内容
7
- * @param options - cookie的配置
8
- * @example
9
- * ```ts
10
- * setCookie('name', 'value')
11
- * setCookie('name', 'value', { expires: 30 })
12
- * ```
13
- */
14
- export function setCookie(
15
- name: string,
16
- value: string,
17
- options: Parameters<typeof Cookies.set>[2] = { expires: 30 },
18
- ) {
19
- Cookies.set(name, value, options)
20
- }
21
-
22
- /**
23
- * 获取指定name的cookie值
24
- * @param name - cookie的key
25
- * @example
26
- * ```ts
27
- * getCookie('name')
28
- * ```
29
- */
30
- export function getCookie(name: string) {
31
- return Cookies.get(name)
32
- }
33
-
34
- /**
35
- * 删除指定name的cookie
36
- * @param name - cookie的key
37
- * @example
38
- * ```ts
39
- * removeCookie('name')
40
- * ```
41
- */
42
- export function removeCookie(name: string) {
43
- Cookies.remove(name)
44
- }
@@ -1,23 +0,0 @@
1
- import { describe, expect, test } from 'vitest'
2
- import { dateDiffFormat } from '../'
3
-
4
- describe('date.ts', () => {
5
- test('dateDiffFormat - YY年MM个月DD天', () => {
6
- const start = '2024-12-18'
7
- const _date = dateDiffFormat(start, 1743762046095)
8
- expect(_date).toEqual('0年3个月17天')
9
- })
10
-
11
- test('dateFormat - param is Date', () => {
12
- const start = '2024-12-18'
13
- const _date = dateDiffFormat(start, 1743762046095, 'MM个月DD天')
14
-
15
- expect(_date).toEqual('3个月17天')
16
- })
17
-
18
- test('dateFormat - param is Date', () => {
19
- const start = '2023-12-18'
20
- const _date = dateDiffFormat(start, '2026-12-18', 'MM个月DD天')
21
- expect(_date).toEqual('36个月0天')
22
- })
23
- })
@@ -1,140 +0,0 @@
1
- import { describe, expect, test } from 'vitest'
2
- import { durationFormat, durationFormatNoZero } from '../'
3
-
4
- describe('date.ts', () => {
5
- test('durationFormat - param is string', () => {
6
- const dateNum = '61'
7
- const _date = durationFormat(dateNum, {
8
- unit: 'm',
9
- })
10
- expect(_date).toEqual('01小时01分钟')
11
- })
12
-
13
- test('durationFormat - param is 1111161 s', () => {
14
- const dateNum = 1111161
15
- const _date = durationFormat(dateNum, {
16
- unit: 's',
17
- format: 'mm分钟ss秒',
18
- })
19
- expect(_date).toEqual('18519分钟21秒')
20
- })
21
-
22
- test('durationFormat - param set min to 61 and format to HH:mm', () => {
23
- const dateNum = 61
24
- const _date = durationFormat(dateNum, {
25
- unit: 'm',
26
- format: 'HH:mm',
27
- })
28
- expect(_date).toEqual('01:01')
29
- })
30
-
31
- test('durationFormat - param set min to 61 and format to Array', () => {
32
- const dateNum = 61
33
- const _dates = durationFormat(dateNum, {
34
- unit: 'm',
35
- format: ['HH', 'mm'],
36
- })
37
- expect(_dates).toEqual(['01', '01'])
38
- })
39
-
40
- test('durationFormat - param is 5126', () => {
41
- const dateNum = 5126758806
42
- const _date = durationFormat(dateNum, {
43
- unit: 'ms',
44
- format: 'DD天HH小时mm分钟ss秒',
45
- })
46
- expect(_date).toEqual('59天08小时05分钟58秒')
47
- })
48
-
49
- test('durationFormat - param is 5126', () => {
50
- const dateNum = 5126758806
51
- const _date = durationFormat(dateNum, {
52
- unit: 'ms',
53
- format: 'HH小时mm分钟ss秒',
54
- })
55
- expect(_date).toEqual('1424小时05分钟58秒')
56
- })
57
-
58
- test('durationFormatNoZero - param is 61m', () => {
59
- const dateNum = '61'
60
- const _date = durationFormatNoZero(dateNum, {
61
- unit: 'm',
62
- })
63
- expect(_date).toEqual('1小时1分钟')
64
- })
65
-
66
- test('durationFormatNoZero - param is 60m', () => {
67
- const dateNum = '60'
68
- const _date = durationFormatNoZero(dateNum, {
69
- unit: 'm',
70
- })
71
- expect(_date).toEqual('1小时')
72
- })
73
-
74
- test('durationFormatNoZero - param is 600m', () => {
75
- const dateNum = '600'
76
- const _date = durationFormatNoZero(dateNum, {
77
- unit: 'm',
78
- })
79
- expect(_date).toEqual('10小时')
80
- })
81
- test('durationFormatNoZero - param is 0.5h', () => {
82
- const dateNum = '0.5'
83
- const _date = durationFormatNoZero(dateNum, {
84
- unit: 'h',
85
- })
86
- expect(_date).toEqual('30分钟')
87
- })
88
- test('durationFormatNoZero - param is 24.03h', () => {
89
- const dateNum = '24.03'
90
- const _date = durationFormatNoZero(dateNum, {
91
- unit: 'h',
92
- })
93
- expect(_date).toEqual('1天1分钟')
94
- })
95
- test('durationFormatNoZero - format is HH小时mm分钟ss秒', () => {
96
- const dateNum = '24.5'
97
- const _date = durationFormatNoZero(dateNum, {
98
- unit: 'h',
99
- format: 'HH小时mm分钟ss秒',
100
- })
101
- expect(_date).toEqual('24小时30分钟')
102
- })
103
-
104
- test('durationFormatNoZero - param is 100.5h', () => {
105
- const dateNum = '100.5'
106
- const _date = durationFormatNoZero(dateNum, {
107
- unit: 'h',
108
- format: 'HH小时mm分钟ss秒',
109
- })
110
- expect(_date).toEqual('100小时30分钟')
111
- })
112
-
113
- test('durationFormatNoZero - param is 1.05h', () => {
114
- const dateNum = '1.05'
115
- const _date = durationFormatNoZero(dateNum, {
116
- unit: 'h',
117
- format: 'HH小时mm分钟',
118
- })
119
- expect(_date).toEqual('01小时03分钟')
120
- })
121
-
122
- test('durationFormatNoZero - param is 0', () => {
123
- const dateNum = 0
124
- const _date = durationFormatNoZero(dateNum, {
125
- unit: 'h',
126
- format: 'HH小时mm分钟',
127
- })
128
- expect(_date).toEqual('')
129
- })
130
-
131
- test('durationFormatNoZero - param is null', () => {
132
- const dateNum = null
133
- //@ts-ignore
134
- const _date = durationFormatNoZero(dateNum, {
135
- unit: 'h',
136
- format: 'HH小时mm分钟',
137
- })
138
- expect(_date).toEqual('')
139
- })
140
- })
@@ -1,64 +0,0 @@
1
- import { describe, expect, test } from 'vitest'
2
- import { dateFromNow } from '../'
3
-
4
- describe('date.ts', () => {
5
- test('dateFromNow - param is 29 min', () => {
6
- const testDate1 = new Date(new Date().getTime() - 29 * 60 * 1000) // 29分钟前
7
- const _date = dateFromNow(testDate1)
8
- expect(_date).toEqual('29分钟前')
9
- })
10
-
11
- test('dateFromNow - param is today', () => {
12
- const testDate2 = new Date(
13
- new Date().getFullYear(),
14
- new Date().getMonth(),
15
- new Date().getDate(),
16
- 9,
17
- 23,
18
- ) // 今天 09:23
19
- const _date = dateFromNow(testDate2)
20
- expect(_date).toEqual('今天 09:23')
21
- })
22
-
23
- test('dateFromNow - param is past', () => {
24
- const testDate4 = new Date(2024, 4, 20)
25
- const _date = dateFromNow(testDate4)
26
- expect(_date).toEqual('2024/05/20')
27
- })
28
-
29
- test('dateFromNow - param is future', () => {
30
- const testDate4 = new Date(2024, 5, 20)
31
- const _date = dateFromNow(testDate4)
32
- expect(_date).toEqual('2024/06/20')
33
- })
34
-
35
- test('dateFromNow - param is 29 min and custom format', () => {
36
- const testDate1 = new Date(new Date().getTime() - 29 * 60 * 1000) // 29分钟前
37
- const _date = dateFromNow(testDate1, {
38
- minuteAgo: '${m} Minutes ago',
39
- })
40
- expect(_date).toEqual('29 Minutes ago')
41
- })
42
-
43
- test('dateFromNow - param is today and custom format', () => {
44
- const testDate2 = new Date(
45
- new Date().getFullYear(),
46
- new Date().getMonth(),
47
- new Date().getDate(),
48
- 9,
49
- 23,
50
- ) // 今天 09:23
51
- const _date = dateFromNow(testDate2, {
52
- today: '今日 ${HH:mm}',
53
- })
54
- expect(_date).toEqual('今日 09:23')
55
- })
56
-
57
- test('dateFromNow - param is past and custom format', () => {
58
- const testDate4 = new Date(2024, 4, 20)
59
- const _date = dateFromNow(testDate4, {
60
- other: '${YYYY-MM-DD}',
61
- })
62
- expect(_date).toEqual('2024-05-20')
63
- })
64
- })
@@ -1,67 +0,0 @@
1
- import { describe, expect, test } from 'vitest'
2
- import { dateFormat, minute } from '../'
3
-
4
- describe('date.ts', () => {
5
- test('dateFormat - param is Date', () => {
6
- const dateStr = new Date(2024, 2, 1)
7
- const date = '2024-03-01 00:00:00'
8
- const _date = dateFormat(dateStr)
9
- expect(_date).toEqual(date)
10
- })
11
-
12
- test('dateFormat - param is string ISO 8601', () => {
13
- const dateStr = '2024-03-01T16:00:00.000Z'
14
- const date = '2024-03-02 00:00:00'
15
- const _date = dateFormat(dateStr)
16
- expect(_date).toEqual(date)
17
- })
18
-
19
- test('dateFormat - param is string timestamp', () => {
20
- const dateStr = '1709286300000'
21
- const date = '2024-03-01 17:45:00'
22
- const _date = dateFormat(dateStr)
23
- expect(_date).toEqual(date)
24
- })
25
-
26
- test('dateFormat - param is number timestamp', () => {
27
- const dateNum = 1709286300000
28
- const date = '2024-03-01 17:45:00'
29
- const _date = dateFormat(dateNum)
30
- expect(_date).toEqual(date)
31
- })
32
-
33
- test('minute - param is null ', () => {
34
- const dateStr = ''
35
- const date = null
36
- const _date = minute(date)
37
- expect(_date).toEqual(dateStr)
38
- })
39
-
40
- test('minute - param is empty string ', () => {
41
- const dateStr = ''
42
- const date = ''
43
- const _date = minute(date)
44
- expect(_date).toEqual(dateStr)
45
- })
46
-
47
- test('minute - param is string ISO 8601', () => {
48
- const dateStr = '2024-03-01T16:00:00.000Z'
49
- const date = '2024-03-02 00:00'
50
- const _date = minute(dateStr)
51
- expect(_date).toEqual(date)
52
- })
53
-
54
- test('minute - param is string timestamp', () => {
55
- const dateStr = '1709286300000'
56
- const date = '2024-03-01 17:45'
57
- const _date = minute(dateStr)
58
- expect(_date).toEqual(date)
59
- })
60
-
61
- test('minute - param is number timestamp', () => {
62
- const dateNum = 1709286300000
63
- const date = '2024-03-01 17:45'
64
- const _date = minute(dateNum)
65
- expect(_date).toEqual(date)
66
- })
67
- })
package/src/date/index.ts DELETED
@@ -1,331 +0,0 @@
1
- import dayjs, { type OpUnitType, type QUnitType } from 'dayjs'
2
- import type { DurationUnitType } from 'dayjs/plugin/duration'
3
- import duration from 'dayjs/plugin/duration'
4
- dayjs.extend(duration)
5
-
6
- /**
7
- * 使用dayjs的实例
8
- * @param date - 日期
9
- * @param fmt -格式 YYYY-MM-DD HH:mm:ss
10
- * @example
11
- * ```ts
12
- * //默认当前时间,返回dayjs()实例,可以format,diff,subtract等方法
13
- * useDate().format('YYYY-MM-DD HH:mm:ss')
14
- * //指定时间戳
15
- * useDate(1709286300000).format('YYYY-MM-DD HH:mm:ss')
16
- * useDate(2024-03-02 00:00)
17
- * useDate(new Date(2024, 2, 1))
18
- * ```
19
- */
20
- export const useDate = (date?: dayjs.ConfigType, format?: dayjs.OptionType, strict?: boolean) => {
21
- const dateNum = Number(date)
22
- const d = isNaN(dateNum) ? date : dateNum
23
- return dayjs(d, format, strict)
24
- }
25
-
26
- /**
27
- * 给定日期转成特点格式字符串
28
- * @param date - 日期
29
- * @param fmt -格式 YYYY-MM-DD HH:mm:ss
30
- * @example
31
- * ```ts
32
- * dateFormat(1709286300000,'YYYY-MM-DD')
33
- * dateFormat(2024-03-02 00:00,'YYYY-MM-DD')
34
- * dateFormat(new Date(2024, 2, 1),'YYYY-MM-DD HH:mm')
35
- * ```
36
- */
37
- export const dateFormat = (date: dayjs.ConfigType, fmt = 'YYYY-MM-DD HH:mm:ss') => {
38
- if (date === null || date === '') return ''
39
- return useDate(date).format(fmt)
40
- }
41
-
42
- /**
43
- * 返回当前时间,默认到分钟的格式
44
- * @param date - 日期
45
- * @param fmt - 格式
46
- * @returns date-日期 YYYY-MM-DD HH:mm
47
- * @example
48
- * ```ts
49
- * minute(1709286300000)
50
- * minute(2024-03-02 00:00)
51
- * minute(new Date(2024, 2, 1))
52
- * ```
53
- */
54
- export const minute = (date: dayjs.ConfigType, fmt = 'YYYY-MM-DD HH:mm') => {
55
- if (date === null || date === '') return ''
56
- return useDate(date).format(fmt)
57
- }
58
-
59
- /**
60
- * 返回月份天数
61
- * @param date - 日期
62
- * @returns 天数
63
- */
64
- export const dateMonthDays = (date?: dayjs.ConfigType) => {
65
- return dayjs(date).daysInMonth()
66
- }
67
-
68
- /**
69
- * 返回前后i天的日期字符串
70
- * @param i - 0返回今天的日期、1返回明天的日期,2返回后天得日期,依次类推
71
- * @param format- 格式 YYYY-MM-DD
72
- * @returns format 格式的起始日期字符串
73
- * ```ts
74
- * getCurrDate()
75
- * getCurrDate(1)
76
- * ```
77
- */
78
- export function getCurrDate(i = 0, format = 'YYYY-MM-DD'): string {
79
- return dateFormat(dayjs().add(i, 'day'), format)
80
- }
81
-
82
- /**
83
- * 返回指定单位下两个日期时间之间的差异。
84
- * @param date1 -第一个时间
85
- * @param date2 -第二个时间,默认是今天
86
- * @returns 两个日期时间之间的差异时间戳
87
- * @example
88
- * ```ts
89
- * dateDiff(1709286300000)
90
- * dateDiff(1709286300000,1709286400000)
91
- * ```
92
- */
93
- export function dateDiff(
94
- date1: dayjs.ConfigType,
95
- date2?: dayjs.ConfigType,
96
- unit?: QUnitType | OpUnitType,
97
- ): number {
98
- if (!date1) return 0
99
- if (!date2) date2 = undefined
100
- const _date1 = useDate(date1)
101
- const _date2 = useDate(date2)
102
- return useDate(_date1).diff(_date2, unit)
103
- }
104
-
105
- type Format = {
106
- minuteAgo?: string
107
- today?: string
108
- yesterday?: string
109
- future?: string
110
- other?: string
111
- }
112
-
113
- /**
114
- * 根据指定日期距今天日期的时间差,展示不同格式。
115
- * - 时间差小于1小时,展示为 X分钟前
116
- * - 时间差-今天内,展示为 今天 HH:MM
117
- * - 时间差-昨天的时间,展示为 昨天 HH:MM
118
- * - 其他,展示为 YYYY/MM/DD
119
- * @param date - 指定日期
120
- * @example
121
- * ```ts
122
- * dateFromNow('2024-03-02 00:00')
123
- * dateFromNow('2024-03-02 00:00',{ minuteAgo: '${m} 分钟前'})
124
- * dateFromNow('2024-03-02 00:00', { other: `${YYYY-MM-DD}`})
125
- * ```
126
- */
127
- export function dateFromNow(date: dayjs.ConfigType, _format?: Format): string {
128
- const format = {
129
- zero: '刚刚',
130
- minuteAgo: '${m}分钟前',
131
- today: '今天 ${HH:mm}',
132
- yesterday: '昨天 ${HH:mm}',
133
- other: '${YYYY/MM/DD}',
134
- future: '${YYYY/MM/DD}',
135
- ..._format,
136
- }
137
- const now = dayjs()
138
- const targetDate = useDate(date)
139
-
140
- const diffMinutes = now.diff(targetDate, 'minute')
141
-
142
- const formatString = (formatStr: string) => {
143
- if (formatStr === format.zero) return formatStr
144
- return formatStr.replace(/\${(.*?)}/g, (_, p1) => targetDate.format(p1))
145
- }
146
-
147
- if (diffMinutes < 0) {
148
- // 如果传入的时间大于今天,展示格式:future
149
- return formatString(format.future)
150
- } else if (diffMinutes < 60) {
151
- return format.minuteAgo.replace('${m}', `${Math.abs(diffMinutes)}`)
152
- } else if (targetDate.isSame(now, 'day')) {
153
- // 超过1小时且为当天的:格式示例:今天 12:23
154
- return formatString(format.today)
155
- } else if (targetDate.isSame(now.subtract(1, 'day'), 'day')) {
156
- // 过了当天的展示格式示例:昨天 12:33
157
- return formatString(format.yesterday)
158
- } else {
159
- return formatString(format.other)
160
- }
161
- }
162
-
163
- /**
164
- * 计算两个日期之间的差值(自然年月日)
165
- * @param startDate - 起始日期,格式为 'YYYY-MM-DD HH:mm:ss'
166
- * @param endDate - 结束日期,格式为 'YYYY-MM-DD HH:mm:ss'
167
- * @param format - 输出格式,如 'YY年MM月DD日', 'HH小时mm分钟ss秒' 等 (默认YY年MM个月DD天)
168
- * @returns 根据格式包含差值的字符串
169
- */
170
- export function dateDiffFormat(
171
- startDate: string | number | Date,
172
- endDate?: string | number | Date,
173
- format = 'YY年MM个月DD天',
174
- ) {
175
- const start = dayjs(startDate)
176
- const end = dayjs(endDate)
177
- const units = {
178
- YY: 'year',
179
- MM: 'month',
180
- DD: 'day',
181
- HH: 'hour',
182
- mm: 'minute',
183
- ss: 'second',
184
- } as Record<string, any>
185
-
186
- let result = format
187
- let currentStart = start
188
-
189
- for (const [key, value] of Object.entries(units)) {
190
- if (result.includes(key)) {
191
- const diff = end.diff(currentStart, value)
192
- result = result.replace(key, diff > 0 ? '' + diff : '0')
193
- currentStart = currentStart.add(diff, value)
194
- }
195
- }
196
- return result.trim().replace(/\s+/g, ' ') // 去掉多余的空格
197
- }
198
-
199
- export function durationFormat(
200
- duration: string | number,
201
- config?: {
202
- unit?: DurationUnitType
203
- format?: string
204
- },
205
- ): string
206
-
207
- export function durationFormat(
208
- duration: string | number,
209
- config?: {
210
- unit?: DurationUnitType
211
- format: Array<string>
212
- },
213
- ): Array<string>
214
-
215
- /**
216
- * 根据传入的数值,返回格式化后的时间
217
- * @param duration -传入的数值
218
- * @param config - 可选的配置项(默认 unit='ms',format=''HH小时mm分钟')
219
- *
220
- * - unit 代表duration的值是什么单位, ('d' | 'D' | 'M' | 'y' |'H' | 'h' | 'm' | 's' | 'ms')
221
- - format 返回的数据格式 (比如:'HH小时mm分钟', ['D','H','m']等)
222
- * @returns 格式化后的时间
223
- * @example
224
- * ```ts
225
- const m = durationFormat(61, {
226
- unit: 'm',
227
- })
228
- const _date = durationFormat(61, {
229
- unit: 'm',
230
- format: 'HH:mm',
231
- })
232
- * ```
233
- */
234
- export function durationFormat(
235
- duration: string | number,
236
- config?: {
237
- unit?: DurationUnitType
238
- format?: Array<string> | string
239
- },
240
- ): Array<string> | string {
241
- if (!duration) return ''
242
- const { format = 'HH小时mm分钟', unit = 'ms' } = config || {}
243
- const _duration = dayjs.duration(Number(duration), unit)
244
- if (Array.isArray(format)) {
245
- return format.map((key) => {
246
- return _duration.format(key)
247
- })
248
- }
249
- return formatDate(format, duration, unit)
250
- }
251
-
252
- /**
253
- * 根据传入的数值,返回格式化后的时间(会自动去掉为0的格式)
254
- * @param duration -传入的数值
255
- * @param config - 可选的配置项(默认 unit='ms',format=''HH小时mm分钟')
256
- *
257
- * - unit 代表duration的值是什么单位, ('d' | 'D' | 'M' | 'y' |'H' | 'h' | 'm' | 's' | 'ms')
258
- - format 返回的数据格式 (比如:'HH小时mm分钟', ['D','H','m']等)
259
- * @returns 格式化后的时间
260
- * @example
261
- * ```ts
262
- const m = durationFormatNoZero(61, {
263
- unit: 'm',
264
- })
265
- const _date = durationFormatNoZero(61, {
266
- unit: 'm',
267
- format: 'HH:mm',
268
- })
269
- * ```
270
- */
271
- export function durationFormatNoZero(
272
- duration: string | number,
273
- config?: {
274
- unit?: DurationUnitType
275
- format?: string
276
- },
277
- ): Array<string> | string {
278
- if (!duration) return ''
279
- const { format = 'D天H小时m分钟', unit = 'ms' } = config || {}
280
- const dateStr = formatDate(format, duration, unit)
281
- return dateStr.replace(/(?<![1-9]\d*)0+([^\d]+)/g, '').trim()
282
- }
283
-
284
- /** 格式化时间 */
285
- function formatDate(format = 'HH小时mm分钟', duration: string | number, unit: DurationUnitType) {
286
- const _duration = dayjs.duration(Number(duration), unit)
287
-
288
- if (format.includes('D') && format.includes('H')) {
289
- const hours = Math.floor(_duration.asHours() % 24) + ''
290
- format = format.includes('HH')
291
- ? format.replace('HH', hours.padStart(2, '0'))
292
- : format.replace('H', hours)
293
- }
294
-
295
- const reqArray = format.match(/[YMDHms]/g) || []
296
- let dateStr = _duration.format(format)
297
-
298
- const _replaceDuration = (dateStr: string, source: string) => {
299
- return dateStr.replace(/\d+/, `${Math.floor(+source)}`)
300
- }
301
- switch (reqArray[0]) {
302
- case 'Y':
303
- break
304
- case 'M':
305
- if (_duration.asMonths() >= 12) {
306
- dateStr = _replaceDuration(dateStr, `${_duration.asMonths()}`)
307
- }
308
- break
309
- case 'D':
310
- if (_duration.asDays() >= 30) {
311
- dateStr = _replaceDuration(dateStr, `${_duration.asDays()}`)
312
- }
313
- break
314
- case 'H':
315
- if (_duration.asHours() >= 24) {
316
- dateStr = _replaceDuration(dateStr, `${_duration.asHours()}`)
317
- }
318
- break
319
- case 'm':
320
- if (_duration.asMinutes() >= 60) {
321
- dateStr = _replaceDuration(dateStr, `${_duration.asMinutes()}`)
322
- }
323
- break
324
- case 's':
325
- if (_duration.asSeconds() >= 60) {
326
- dateStr = _replaceDuration(dateStr, `${_duration.asSeconds()}`)
327
- }
328
- break
329
- }
330
- return dateStr
331
- }