react-util-tools 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +254 -0
- package/dist/index.cjs +943 -0
- package/dist/index.d.cts +154 -0
- package/dist/index.d.ts +154 -0
- package/dist/index.js +852 -0
- package/package.json +50 -0
- package/src/address/README.md +196 -0
- package/src/address/index.ts +41 -0
- package/src/date/README.md +539 -0
- package/src/date/index.ts +330 -0
- package/src/date/utc/README.md +779 -0
- package/src/date/utc/index.ts +374 -0
- package/src/decimal/README.md +425 -0
- package/src/decimal/index.ts +9 -0
- package/src/decimal/utils/README.md +474 -0
- package/src/decimal/utils/index.ts +244 -0
- package/src/device/README.md +441 -0
- package/src/device/index.ts +214 -0
- package/src/format/README.md +335 -0
- package/src/format/index.ts +189 -0
- package/src/index.ts +107 -0
- package/src/throttle/README.md +152 -0
- package/src/throttle/index.ts +83 -0
- package/tsconfig.json +28 -0
|
@@ -0,0 +1,330 @@
|
|
|
1
|
+
import {
|
|
2
|
+
format as dateFnsFormat,
|
|
3
|
+
parse,
|
|
4
|
+
parseISO,
|
|
5
|
+
isValid,
|
|
6
|
+
differenceInDays,
|
|
7
|
+
differenceInHours,
|
|
8
|
+
differenceInMinutes,
|
|
9
|
+
addDays,
|
|
10
|
+
addMonths,
|
|
11
|
+
subDays,
|
|
12
|
+
subMonths,
|
|
13
|
+
startOfDay,
|
|
14
|
+
endOfDay,
|
|
15
|
+
startOfWeek,
|
|
16
|
+
endOfWeek,
|
|
17
|
+
startOfMonth,
|
|
18
|
+
endOfMonth,
|
|
19
|
+
startOfYear,
|
|
20
|
+
endOfYear,
|
|
21
|
+
isBefore,
|
|
22
|
+
isAfter,
|
|
23
|
+
isSameDay,
|
|
24
|
+
formatDistanceToNow
|
|
25
|
+
} from 'date-fns'
|
|
26
|
+
import { zhCN } from 'date-fns/locale'
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* 格式化日期
|
|
30
|
+
* @param date 日期对象、时间戳或日期字符串
|
|
31
|
+
* @param formatStr 格式化字符串,默认 'yyyy-MM-dd HH:mm:ss'
|
|
32
|
+
* @returns 格式化后的日期字符串
|
|
33
|
+
*/
|
|
34
|
+
export function formatDate(
|
|
35
|
+
date: Date | number | string,
|
|
36
|
+
formatStr = 'yyyy-MM-dd HH:mm:ss'
|
|
37
|
+
): string {
|
|
38
|
+
const dateObj = typeof date === 'string' ? parseISO(date) : new Date(date)
|
|
39
|
+
return isValid(dateObj) ? dateFnsFormat(dateObj, formatStr) : ''
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* 格式化为日期(不含时间)
|
|
44
|
+
* @param date 日期对象、时间戳或日期字符串
|
|
45
|
+
* @returns 格式化后的日期字符串 'yyyy-MM-dd'
|
|
46
|
+
*/
|
|
47
|
+
export function formatDateOnly(date: Date | number | string): string {
|
|
48
|
+
return formatDate(date, 'yyyy-MM-dd')
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* 格式化为时间(不含日期)
|
|
53
|
+
* @param date 日期对象、时间戳或日期字符串
|
|
54
|
+
* @returns 格式化后的时间字符串 'HH:mm:ss'
|
|
55
|
+
*/
|
|
56
|
+
export function formatTimeOnly(date: Date | number | string): string {
|
|
57
|
+
return formatDate(date, 'HH:mm:ss')
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* 格式化为相对时间(如:3分钟前、2小时前)
|
|
62
|
+
* @param date 日期对象、时间戳或日期字符串
|
|
63
|
+
* @param locale 语言,默认中文
|
|
64
|
+
* @returns 相对时间字符串
|
|
65
|
+
*/
|
|
66
|
+
export function formatRelativeTime(
|
|
67
|
+
date: Date | number | string,
|
|
68
|
+
locale: 'zh' | 'en' = 'zh'
|
|
69
|
+
): string {
|
|
70
|
+
const dateObj = typeof date === 'string' ? parseISO(date) : new Date(date)
|
|
71
|
+
if (!isValid(dateObj)) return ''
|
|
72
|
+
|
|
73
|
+
return formatDistanceToNow(dateObj, {
|
|
74
|
+
addSuffix: true,
|
|
75
|
+
locale: locale === 'zh' ? zhCN : undefined
|
|
76
|
+
})
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* 解析日期字符串
|
|
81
|
+
* @param dateStr 日期字符串
|
|
82
|
+
* @param formatStr 格式化字符串,默认 'yyyy-MM-dd HH:mm:ss'
|
|
83
|
+
* @returns Date 对象
|
|
84
|
+
*/
|
|
85
|
+
export function parseDate(
|
|
86
|
+
dateStr: string,
|
|
87
|
+
formatStr = 'yyyy-MM-dd HH:mm:ss'
|
|
88
|
+
): Date {
|
|
89
|
+
return parse(dateStr, formatStr, new Date())
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* 验证日期是否有效
|
|
94
|
+
* @param date 日期对象、时间戳或日期字符串
|
|
95
|
+
* @returns 是否有效
|
|
96
|
+
*/
|
|
97
|
+
export function isValidDate(date: Date | number | string): boolean {
|
|
98
|
+
const dateObj = typeof date === 'string' ? parseISO(date) : new Date(date)
|
|
99
|
+
return isValid(dateObj)
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* 计算两个日期之间的天数差
|
|
104
|
+
* @param dateLeft 较晚的日期
|
|
105
|
+
* @param dateRight 较早的日期
|
|
106
|
+
* @returns 天数差
|
|
107
|
+
*/
|
|
108
|
+
export function getDaysDiff(
|
|
109
|
+
dateLeft: Date | number | string,
|
|
110
|
+
dateRight: Date | number | string
|
|
111
|
+
): number {
|
|
112
|
+
const left = typeof dateLeft === 'string' ? parseISO(dateLeft) : new Date(dateLeft)
|
|
113
|
+
const right = typeof dateRight === 'string' ? parseISO(dateRight) : new Date(dateRight)
|
|
114
|
+
return differenceInDays(left, right)
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* 计算两个日期之间的小时差
|
|
119
|
+
* @param dateLeft 较晚的日期
|
|
120
|
+
* @param dateRight 较早的日期
|
|
121
|
+
* @returns 小时差
|
|
122
|
+
*/
|
|
123
|
+
export function getHoursDiff(
|
|
124
|
+
dateLeft: Date | number | string,
|
|
125
|
+
dateRight: Date | number | string
|
|
126
|
+
): number {
|
|
127
|
+
const left = typeof dateLeft === 'string' ? parseISO(dateLeft) : new Date(dateLeft)
|
|
128
|
+
const right = typeof dateRight === 'string' ? parseISO(dateRight) : new Date(dateRight)
|
|
129
|
+
return differenceInHours(left, right)
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* 计算两个日期之间的分钟差
|
|
134
|
+
* @param dateLeft 较晚的日期
|
|
135
|
+
* @param dateRight 较早的日期
|
|
136
|
+
* @returns 分钟差
|
|
137
|
+
*/
|
|
138
|
+
export function getMinutesDiff(
|
|
139
|
+
dateLeft: Date | number | string,
|
|
140
|
+
dateRight: Date | number | string
|
|
141
|
+
): number {
|
|
142
|
+
const left = typeof dateLeft === 'string' ? parseISO(dateLeft) : new Date(dateLeft)
|
|
143
|
+
const right = typeof dateRight === 'string' ? parseISO(dateRight) : new Date(dateRight)
|
|
144
|
+
return differenceInMinutes(left, right)
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
/**
|
|
148
|
+
* 增加天数
|
|
149
|
+
* @param date 日期
|
|
150
|
+
* @param amount 天数
|
|
151
|
+
* @returns 新的日期对象
|
|
152
|
+
*/
|
|
153
|
+
export function addDaysToDate(date: Date | number | string, amount: number): Date {
|
|
154
|
+
const dateObj = typeof date === 'string' ? parseISO(date) : new Date(date)
|
|
155
|
+
return addDays(dateObj, amount)
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
/**
|
|
159
|
+
* 减少天数
|
|
160
|
+
* @param date 日期
|
|
161
|
+
* @param amount 天数
|
|
162
|
+
* @returns 新的日期对象
|
|
163
|
+
*/
|
|
164
|
+
export function subDaysFromDate(date: Date | number | string, amount: number): Date {
|
|
165
|
+
const dateObj = typeof date === 'string' ? parseISO(date) : new Date(date)
|
|
166
|
+
return subDays(dateObj, amount)
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
/**
|
|
170
|
+
* 增加月数
|
|
171
|
+
* @param date 日期
|
|
172
|
+
* @param amount 月数
|
|
173
|
+
* @returns 新的日期对象
|
|
174
|
+
*/
|
|
175
|
+
export function addMonthsToDate(date: Date | number | string, amount: number): Date {
|
|
176
|
+
const dateObj = typeof date === 'string' ? parseISO(date) : new Date(date)
|
|
177
|
+
return addMonths(dateObj, amount)
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
/**
|
|
181
|
+
* 减少月数
|
|
182
|
+
* @param date 日期
|
|
183
|
+
* @param amount 月数
|
|
184
|
+
* @returns 新的日期对象
|
|
185
|
+
*/
|
|
186
|
+
export function subMonthsFromDate(date: Date | number | string, amount: number): Date {
|
|
187
|
+
const dateObj = typeof date === 'string' ? parseISO(date) : new Date(date)
|
|
188
|
+
return subMonths(dateObj, amount)
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
/**
|
|
192
|
+
* 获取一天的开始时间(00:00:00)
|
|
193
|
+
* @param date 日期
|
|
194
|
+
* @returns 新的日期对象
|
|
195
|
+
*/
|
|
196
|
+
export function getStartOfDay(date: Date | number | string): Date {
|
|
197
|
+
const dateObj = typeof date === 'string' ? parseISO(date) : new Date(date)
|
|
198
|
+
return startOfDay(dateObj)
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
/**
|
|
202
|
+
* 获取一天的结束时间(23:59:59)
|
|
203
|
+
* @param date 日期
|
|
204
|
+
* @returns 新的日期对象
|
|
205
|
+
*/
|
|
206
|
+
export function getEndOfDay(date: Date | number | string): Date {
|
|
207
|
+
const dateObj = typeof date === 'string' ? parseISO(date) : new Date(date)
|
|
208
|
+
return endOfDay(dateObj)
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
/**
|
|
212
|
+
* 获取一周的开始时间
|
|
213
|
+
* @param date 日期
|
|
214
|
+
* @returns 新的日期对象
|
|
215
|
+
*/
|
|
216
|
+
export function getStartOfWeek(date: Date | number | string): Date {
|
|
217
|
+
const dateObj = typeof date === 'string' ? parseISO(date) : new Date(date)
|
|
218
|
+
return startOfWeek(dateObj, { weekStartsOn: 1 }) // 周一为一周开始
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
/**
|
|
222
|
+
* 获取一周的结束时间
|
|
223
|
+
* @param date 日期
|
|
224
|
+
* @returns 新的日期对象
|
|
225
|
+
*/
|
|
226
|
+
export function getEndOfWeek(date: Date | number | string): Date {
|
|
227
|
+
const dateObj = typeof date === 'string' ? parseISO(date) : new Date(date)
|
|
228
|
+
return endOfWeek(dateObj, { weekStartsOn: 1 })
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
/**
|
|
232
|
+
* 获取一个月的开始时间
|
|
233
|
+
* @param date 日期
|
|
234
|
+
* @returns 新的日期对象
|
|
235
|
+
*/
|
|
236
|
+
export function getStartOfMonth(date: Date | number | string): Date {
|
|
237
|
+
const dateObj = typeof date === 'string' ? parseISO(date) : new Date(date)
|
|
238
|
+
return startOfMonth(dateObj)
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
/**
|
|
242
|
+
* 获取一个月的结束时间
|
|
243
|
+
* @param date 日期
|
|
244
|
+
* @returns 新的日期对象
|
|
245
|
+
*/
|
|
246
|
+
export function getEndOfMonth(date: Date | number | string): Date {
|
|
247
|
+
const dateObj = typeof date === 'string' ? parseISO(date) : new Date(date)
|
|
248
|
+
return endOfMonth(dateObj)
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
/**
|
|
252
|
+
* 获取一年的开始时间
|
|
253
|
+
* @param date 日期
|
|
254
|
+
* @returns 新的日期对象
|
|
255
|
+
*/
|
|
256
|
+
export function getStartOfYear(date: Date | number | string): Date {
|
|
257
|
+
const dateObj = typeof date === 'string' ? parseISO(date) : new Date(date)
|
|
258
|
+
return startOfYear(dateObj)
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
/**
|
|
262
|
+
* 获取一年的结束时间
|
|
263
|
+
* @param date 日期
|
|
264
|
+
* @returns 新的日期对象
|
|
265
|
+
*/
|
|
266
|
+
export function getEndOfYear(date: Date | number | string): Date {
|
|
267
|
+
const dateObj = typeof date === 'string' ? parseISO(date) : new Date(date)
|
|
268
|
+
return endOfYear(dateObj)
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
/**
|
|
272
|
+
* 判断日期是否在另一个日期之前
|
|
273
|
+
* @param date 要比较的日期
|
|
274
|
+
* @param dateToCompare 比较的目标日期
|
|
275
|
+
* @returns 是否在之前
|
|
276
|
+
*/
|
|
277
|
+
export function isBeforeDate(
|
|
278
|
+
date: Date | number | string,
|
|
279
|
+
dateToCompare: Date | number | string
|
|
280
|
+
): boolean {
|
|
281
|
+
const dateObj = typeof date === 'string' ? parseISO(date) : new Date(date)
|
|
282
|
+
const compareObj = typeof dateToCompare === 'string' ? parseISO(dateToCompare) : new Date(dateToCompare)
|
|
283
|
+
return isBefore(dateObj, compareObj)
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
/**
|
|
287
|
+
* 判断日期是否在另一个日期之后
|
|
288
|
+
* @param date 要比较的日期
|
|
289
|
+
* @param dateToCompare 比较的目标日期
|
|
290
|
+
* @returns 是否在之后
|
|
291
|
+
*/
|
|
292
|
+
export function isAfterDate(
|
|
293
|
+
date: Date | number | string,
|
|
294
|
+
dateToCompare: Date | number | string
|
|
295
|
+
): boolean {
|
|
296
|
+
const dateObj = typeof date === 'string' ? parseISO(date) : new Date(date)
|
|
297
|
+
const compareObj = typeof dateToCompare === 'string' ? parseISO(dateToCompare) : new Date(dateToCompare)
|
|
298
|
+
return isAfter(dateObj, compareObj)
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
/**
|
|
302
|
+
* 判断两个日期是否是同一天
|
|
303
|
+
* @param dateLeft 第一个日期
|
|
304
|
+
* @param dateRight 第二个日期
|
|
305
|
+
* @returns 是否是同一天
|
|
306
|
+
*/
|
|
307
|
+
export function isSameDayDate(
|
|
308
|
+
dateLeft: Date | number | string,
|
|
309
|
+
dateRight: Date | number | string
|
|
310
|
+
): boolean {
|
|
311
|
+
const left = typeof dateLeft === 'string' ? parseISO(dateLeft) : new Date(dateLeft)
|
|
312
|
+
const right = typeof dateRight === 'string' ? parseISO(dateRight) : new Date(dateRight)
|
|
313
|
+
return isSameDay(left, right)
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
/**
|
|
317
|
+
* 获取当前时间戳(毫秒)
|
|
318
|
+
* @returns 时间戳
|
|
319
|
+
*/
|
|
320
|
+
export function getTimestamp(): number {
|
|
321
|
+
return Date.now()
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
/**
|
|
325
|
+
* 获取当前时间戳(秒)
|
|
326
|
+
* @returns 时间戳
|
|
327
|
+
*/
|
|
328
|
+
export function getTimestampInSeconds(): number {
|
|
329
|
+
return Math.floor(Date.now() / 1000)
|
|
330
|
+
}
|