@cloudcome/utils-core 1.19.0 → 1.20.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/array.cjs +181 -125
- package/dist/array.cjs.map +1 -1
- package/dist/array.mjs +181 -133
- package/dist/array.mjs.map +1 -1
- package/dist/async.cjs +181 -171
- package/dist/async.cjs.map +1 -1
- package/dist/async.mjs +181 -174
- package/dist/async.mjs.map +1 -1
- package/dist/base64.cjs +16 -12
- package/dist/base64.cjs.map +1 -1
- package/dist/base64.mjs +17 -14
- package/dist/base64.mjs.map +1 -1
- package/dist/cache.cjs +79 -67
- package/dist/cache.cjs.map +1 -1
- package/dist/cache.d.ts +3 -3
- package/dist/cache.mjs +80 -71
- package/dist/cache.mjs.map +1 -1
- package/dist/color.cjs +478 -167
- package/dist/color.cjs.map +1 -1
- package/dist/color.d.ts +3 -3
- package/dist/color.mjs +480 -197
- package/dist/color.mjs.map +1 -1
- package/dist/crypto.cjs +474 -687
- package/dist/crypto.cjs.map +1 -1
- package/dist/crypto.mjs +476 -693
- package/dist/crypto.mjs.map +1 -1
- package/dist/date.cjs +972 -161
- package/dist/date.cjs.map +1 -1
- package/dist/date.d.ts +2 -2
- package/dist/date.mjs +962 -191
- package/dist/date.mjs.map +1 -1
- package/dist/dict.cjs +90 -52
- package/dist/dict.cjs.map +1 -1
- package/dist/dict.d.ts +1 -1
- package/dist/dict.mjs +91 -54
- package/dist/dict.mjs.map +1 -1
- package/dist/easing.cjs +105 -103
- package/dist/easing.cjs.map +1 -1
- package/dist/easing.mjs +106 -133
- package/dist/easing.mjs.map +1 -1
- package/dist/emitter.cjs +101 -96
- package/dist/emitter.cjs.map +1 -1
- package/dist/emitter.mjs +101 -97
- package/dist/emitter.mjs.map +1 -1
- package/dist/env.cjs +43 -9
- package/dist/env.cjs.map +1 -1
- package/dist/env.d.ts +1 -1
- package/dist/env.mjs +43 -15
- package/dist/env.mjs.map +1 -1
- package/dist/error.cjs +26 -5
- package/dist/error.cjs.map +1 -1
- package/dist/error.mjs +26 -7
- package/dist/error.mjs.map +1 -1
- package/dist/exception.cjs +38 -20
- package/dist/exception.cjs.map +1 -1
- package/dist/exception.d.ts +5 -5
- package/dist/exception.mjs +38 -21
- package/dist/exception.mjs.map +1 -1
- package/dist/function.cjs +128 -68
- package/dist/function.cjs.map +1 -1
- package/dist/function.mjs +128 -72
- package/dist/function.mjs.map +1 -1
- package/dist/index.cjs +8 -3
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +9 -5
- package/dist/index.mjs.map +1 -1
- package/dist/number.cjs +10 -14
- package/dist/number.mjs +2 -15
- package/dist/object/get-set.d.ts +27 -3
- package/dist/object/merge.d.ts +2 -2
- package/dist/object.cjs +369 -106
- package/dist/object.cjs.map +1 -1
- package/dist/object.mjs +366 -115
- package/dist/object.mjs.map +1 -1
- package/dist/path.cjs +144 -55
- package/dist/path.cjs.map +1 -1
- package/dist/path.mjs +144 -62
- package/dist/path.mjs.map +1 -1
- package/dist/promise.cjs +84 -43
- package/dist/promise.cjs.map +1 -1
- package/dist/promise.mjs +85 -50
- package/dist/promise.mjs.map +1 -1
- package/dist/qs.cjs +63 -39
- package/dist/qs.cjs.map +1 -1
- package/dist/qs.mjs +64 -42
- package/dist/qs.mjs.map +1 -1
- package/dist/regexp.cjs +118 -35
- package/dist/regexp.cjs.map +1 -1
- package/dist/regexp.mjs +119 -46
- package/dist/regexp.mjs.map +1 -1
- package/dist/string.cjs +12 -15
- package/dist/string.mjs +2 -16
- package/dist/string2.cjs +378 -142
- package/dist/string2.cjs.map +1 -1
- package/dist/string2.mjs +259 -143
- package/dist/string2.mjs.map +1 -1
- package/dist/time.cjs +136 -59
- package/dist/time.cjs.map +1 -1
- package/dist/time.mjs +136 -65
- package/dist/time.mjs.map +1 -1
- package/dist/timer.cjs +122 -112
- package/dist/timer.cjs.map +1 -1
- package/dist/timer.mjs +123 -115
- package/dist/timer.mjs.map +1 -1
- package/dist/tree.cjs +207 -112
- package/dist/tree.cjs.map +1 -1
- package/dist/tree.mjs +207 -116
- package/dist/tree.mjs.map +1 -1
- package/dist/try/curry.d.ts +1 -1
- package/dist/try.cjs +36 -37
- package/dist/try.cjs.map +1 -1
- package/dist/try.mjs +35 -37
- package/dist/try.mjs.map +1 -1
- package/dist/type.cjs +126 -24
- package/dist/type.cjs.map +1 -1
- package/dist/type.d.ts +2 -2
- package/dist/type.mjs +128 -45
- package/dist/type.mjs.map +1 -1
- package/dist/types.cjs +0 -2
- package/dist/types.d.ts +2 -2
- package/dist/types.mjs +0 -2
- package/dist/unique.cjs +41 -38
- package/dist/unique.cjs.map +1 -1
- package/dist/unique.mjs +42 -41
- package/dist/unique.mjs.map +1 -1
- package/dist/url.cjs +39 -30
- package/dist/url.cjs.map +1 -1
- package/dist/url.mjs +40 -33
- package/dist/url.mjs.map +1 -1
- package/dist/version.cjs +51 -33
- package/dist/version.cjs.map +1 -1
- package/dist/version.mjs +51 -35
- package/dist/version.mjs.map +1 -1
- package/package.json +104 -105
- package/dist/const.cjs +0 -14
- package/dist/const.cjs.map +0 -1
- package/dist/const.mjs +0 -15
- package/dist/const.mjs.map +0 -1
- package/dist/core.cjs +0 -362
- package/dist/core.cjs.map +0 -1
- package/dist/core.mjs +0 -363
- package/dist/core.mjs.map +0 -1
- package/dist/crypto/md5.d.mts +0 -1
- package/dist/crypto/sha1.d.mts +0 -1
- package/dist/crypto/sha256.d.mts +0 -1
- package/dist/crypto/sha512.d.mts +0 -1
- package/dist/each.cjs +0 -18
- package/dist/each.cjs.map +0 -1
- package/dist/each.mjs +0 -19
- package/dist/each.mjs.map +0 -1
- package/dist/merge.cjs +0 -87
- package/dist/merge.cjs.map +0 -1
- package/dist/merge.mjs +0 -88
- package/dist/merge.mjs.map +0 -1
- package/dist/number.cjs.map +0 -1
- package/dist/number.mjs.map +0 -1
- package/dist/string.cjs.map +0 -1
- package/dist/string.mjs.map +0 -1
- package/dist/types.cjs.map +0 -1
- package/dist/types.mjs.map +0 -1
package/dist/date.cjs
CHANGED
|
@@ -1,223 +1,1030 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
-
const
|
|
4
|
-
const
|
|
5
|
-
const
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
2
|
+
const require_type = require("./type.cjs");
|
|
3
|
+
const require_string = require("./string2.cjs");
|
|
4
|
+
//#region src/date/const.ts
|
|
5
|
+
/**
|
|
6
|
+
* 一秒的毫秒数
|
|
7
|
+
*/
|
|
8
|
+
var DATE_SECOND_MS = 1e3;
|
|
9
|
+
/**
|
|
10
|
+
* 一分钟的毫秒数
|
|
11
|
+
*/
|
|
12
|
+
var DATE_MINUTE_MS = 60 * DATE_SECOND_MS;
|
|
13
|
+
/**
|
|
14
|
+
* 一小时的毫秒数
|
|
15
|
+
*/
|
|
16
|
+
var DATE_HOUR_MS = 60 * DATE_MINUTE_MS;
|
|
17
|
+
/**
|
|
18
|
+
* 一天的毫秒数
|
|
19
|
+
*/
|
|
20
|
+
var DATE_DAY_MS = 24 * DATE_HOUR_MS;
|
|
21
|
+
/**
|
|
22
|
+
* 一个月(30天)的毫秒数
|
|
23
|
+
*/
|
|
24
|
+
var DATE_MONTH_MS = 30 * DATE_DAY_MS;
|
|
25
|
+
/**
|
|
26
|
+
* 一年(365天)的毫秒数
|
|
27
|
+
*/
|
|
28
|
+
var DATE_YEAR_MS = 365 * DATE_DAY_MS;
|
|
29
|
+
//#endregion
|
|
30
|
+
//#region src/date/timezone.ts
|
|
31
|
+
/**
|
|
32
|
+
* 时区偏移量毫秒常量(1分钟 = 60 * 1000 毫秒)
|
|
33
|
+
*/
|
|
34
|
+
var TIMEZONE_OFFSET_MS = 60 * 1e3;
|
|
35
|
+
/**
|
|
36
|
+
* 时区日期类,用于处理不同时区的日期时间
|
|
37
|
+
*/
|
|
38
|
+
var TimezoneDate = class TimezoneDate {
|
|
39
|
+
/**
|
|
40
|
+
* 内部时间戳
|
|
41
|
+
*/
|
|
42
|
+
#timestamp;
|
|
43
|
+
/**
|
|
44
|
+
* 目标时区的日期对象
|
|
45
|
+
*/
|
|
46
|
+
#targetDate;
|
|
47
|
+
/**
|
|
48
|
+
* UTC 日期对象
|
|
49
|
+
*/
|
|
50
|
+
#utcDate;
|
|
51
|
+
/**
|
|
52
|
+
* 本地时区偏移量(分钟)
|
|
53
|
+
*/
|
|
54
|
+
#localTimezoneOffset = TimezoneDate.getTimezoneOffset();
|
|
55
|
+
/**
|
|
56
|
+
* 本地时区偏移量(毫秒)
|
|
57
|
+
*/
|
|
58
|
+
#localTimezoneOffsetMS = this.#localTimezoneOffset * TIMEZONE_OFFSET_MS;
|
|
59
|
+
/**
|
|
60
|
+
* 目标时区偏移量(分钟)
|
|
61
|
+
*/
|
|
62
|
+
#targetTimezoneOffset = 0;
|
|
63
|
+
/**
|
|
64
|
+
* 目标时区偏移量(毫秒)
|
|
65
|
+
*/
|
|
66
|
+
#targetTimezoneOffsetMS = 0;
|
|
67
|
+
/**
|
|
68
|
+
* 构造函数选项
|
|
69
|
+
*/
|
|
70
|
+
#options;
|
|
71
|
+
/**
|
|
72
|
+
* 构造一个 TimezoneDate 实例
|
|
73
|
+
* @param options - 配置选项
|
|
74
|
+
*/
|
|
75
|
+
constructor(options) {
|
|
76
|
+
this.#options = (options instanceof TimezoneDate ? {
|
|
77
|
+
timestamp: options.getTime(),
|
|
78
|
+
utcOffset: options.getUTCOffset()
|
|
79
|
+
} : options) || {};
|
|
80
|
+
const { utcOffset, timestamp, value } = this.#options;
|
|
81
|
+
this.#targetTimezoneOffset = require_type.isNumber(utcOffset) ? TimezoneDate.getTimezoneOffset(utcOffset) : this.#localTimezoneOffset;
|
|
82
|
+
this.#targetTimezoneOffsetMS = this.#targetTimezoneOffset * TIMEZONE_OFFSET_MS;
|
|
83
|
+
if (Array.isArray(value) && value.length > 0) {
|
|
84
|
+
const [fullYear, month, day, hours, minutes, seconds, milliseconds] = value;
|
|
85
|
+
const timestamp = Date.UTC(fullYear ?? 0, month ?? 0, day ?? 1, hours ?? 0, minutes ?? 0, seconds ?? 0, milliseconds ?? 0);
|
|
86
|
+
this.#timestamp = timestamp + this.#targetTimezoneOffsetMS;
|
|
87
|
+
} else this.#timestamp = timestamp || Date.now();
|
|
88
|
+
this.#targetDate = new Date(this.#timestamp + this.#localTimezoneOffsetMS - this.#targetTimezoneOffsetMS);
|
|
89
|
+
this.#utcDate = new Date(this.#timestamp + this.#localTimezoneOffsetMS);
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* 更新内部时间戳
|
|
93
|
+
*/
|
|
94
|
+
#updateTimestamp() {
|
|
95
|
+
this.#timestamp = this.#targetDate.getTime() + this.#targetTimezoneOffsetMS - this.#localTimezoneOffsetMS;
|
|
96
|
+
this.#utcDate = new Date(this.#timestamp + this.#localTimezoneOffsetMS);
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* 获取时区偏移量(分钟)
|
|
100
|
+
* @returns 时区偏移量
|
|
101
|
+
*/
|
|
102
|
+
getTimezoneOffset() {
|
|
103
|
+
return this.#targetTimezoneOffset;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* 获取时区偏移量(UTC)
|
|
107
|
+
* @returns 时区序号
|
|
108
|
+
*/
|
|
109
|
+
getUTCOffset() {
|
|
110
|
+
return TimezoneDate.getUTCOffset(this.#targetTimezoneOffset);
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* 获取年份
|
|
114
|
+
* @returns 年份
|
|
115
|
+
*/
|
|
116
|
+
getFullYear() {
|
|
117
|
+
return this.#targetDate.getFullYear();
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* 获取月份
|
|
121
|
+
* @returns 月份 (0-11)
|
|
122
|
+
*/
|
|
123
|
+
getMonth() {
|
|
124
|
+
return this.#targetDate.getMonth();
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* 获取日期
|
|
128
|
+
* @returns 日期 (1-31)
|
|
129
|
+
*/
|
|
130
|
+
getDate() {
|
|
131
|
+
return this.#targetDate.getDate();
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* 获取小时
|
|
135
|
+
* @returns 小时 (0-23)
|
|
136
|
+
*/
|
|
137
|
+
getHours() {
|
|
138
|
+
return this.#targetDate.getHours();
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* 获取分钟
|
|
142
|
+
* @returns 分钟 (0-59)
|
|
143
|
+
*/
|
|
144
|
+
getMinutes() {
|
|
145
|
+
return this.#targetDate.getMinutes();
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* 获取秒数
|
|
149
|
+
* @returns 秒数 (0-59)
|
|
150
|
+
*/
|
|
151
|
+
getSeconds() {
|
|
152
|
+
return this.#targetDate.getSeconds();
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* 获取毫秒
|
|
156
|
+
* @returns 毫秒 (0-999)
|
|
157
|
+
*/
|
|
158
|
+
getMilliseconds() {
|
|
159
|
+
return this.#targetDate.getMilliseconds();
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* 设置年份
|
|
163
|
+
* @param year - 年份
|
|
164
|
+
* @param month - 月份
|
|
165
|
+
* @param date - 日期
|
|
166
|
+
* @returns 时间戳
|
|
167
|
+
*/
|
|
168
|
+
setFullYear(year, month, date) {
|
|
169
|
+
this.#targetDate.setFullYear(year);
|
|
170
|
+
this.#updateTimestamp();
|
|
171
|
+
if (require_type.isNumber(month)) this.setMonth(month);
|
|
172
|
+
if (require_type.isNumber(date)) this.setDate(date);
|
|
173
|
+
return this.getTime();
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* 设置月份
|
|
177
|
+
* @param month - 月份
|
|
178
|
+
* @param date - 日期
|
|
179
|
+
* @returns 时间戳
|
|
180
|
+
*/
|
|
181
|
+
setMonth(month, date) {
|
|
182
|
+
this.#targetDate.setMonth(month);
|
|
183
|
+
this.#updateTimestamp();
|
|
184
|
+
if (require_type.isNumber(date)) this.setDate(date);
|
|
185
|
+
return this.getTime();
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* 设置日期
|
|
189
|
+
* @param date - 日期
|
|
190
|
+
* @returns 时间戳
|
|
191
|
+
*/
|
|
192
|
+
setDate(date) {
|
|
193
|
+
this.#targetDate.setDate(date);
|
|
194
|
+
this.#updateTimestamp();
|
|
195
|
+
return this.getTime();
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* 设置小时
|
|
199
|
+
* @param hours - 小时
|
|
200
|
+
* @param minutes - 分钟
|
|
201
|
+
* @param seconds - 秒数
|
|
202
|
+
* @param milliseconds - 毫秒
|
|
203
|
+
* @returns 时间戳
|
|
204
|
+
*/
|
|
205
|
+
setHours(hours, minutes, seconds, milliseconds) {
|
|
206
|
+
this.#targetDate.setHours(hours);
|
|
207
|
+
this.#updateTimestamp();
|
|
208
|
+
if (require_type.isNumber(minutes)) this.setMinutes(minutes);
|
|
209
|
+
if (require_type.isNumber(seconds)) this.setSeconds(seconds);
|
|
210
|
+
if (require_type.isNumber(milliseconds)) this.setMilliseconds(milliseconds);
|
|
211
|
+
return this.getTime();
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* 设置分钟
|
|
215
|
+
* @param minutes - 分钟
|
|
216
|
+
* @param seconds - 秒数
|
|
217
|
+
* @param milliseconds - 毫秒
|
|
218
|
+
* @returns 时间戳
|
|
219
|
+
*/
|
|
220
|
+
setMinutes(minutes, seconds, milliseconds) {
|
|
221
|
+
this.#targetDate.setMinutes(minutes);
|
|
222
|
+
this.#updateTimestamp();
|
|
223
|
+
if (require_type.isNumber(seconds)) this.setSeconds(seconds);
|
|
224
|
+
if (require_type.isNumber(milliseconds)) this.setMilliseconds(milliseconds);
|
|
225
|
+
return this.getTime();
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* 设置秒数
|
|
229
|
+
* @param seconds - 秒数
|
|
230
|
+
* @param milliseconds - 毫秒
|
|
231
|
+
* @returns 时间戳
|
|
232
|
+
*/
|
|
233
|
+
setSeconds(seconds, milliseconds) {
|
|
234
|
+
this.#targetDate.setSeconds(seconds);
|
|
235
|
+
this.#updateTimestamp();
|
|
236
|
+
if (require_type.isNumber(milliseconds)) this.setMilliseconds(milliseconds);
|
|
237
|
+
return this.getTime();
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* 设置毫秒
|
|
241
|
+
* @param milliseconds - 毫秒
|
|
242
|
+
* @returns 时间戳
|
|
243
|
+
*/
|
|
244
|
+
setMilliseconds(milliseconds) {
|
|
245
|
+
this.#targetDate.setMilliseconds(milliseconds);
|
|
246
|
+
this.#updateTimestamp();
|
|
247
|
+
return this.getTime();
|
|
248
|
+
}
|
|
249
|
+
/**
|
|
250
|
+
* 获取时间戳
|
|
251
|
+
* @returns 时间戳
|
|
252
|
+
*/
|
|
253
|
+
getTime() {
|
|
254
|
+
return this.#timestamp;
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* 获取星期几
|
|
258
|
+
* @returns 星期几 (0-6, 0表示周日)
|
|
259
|
+
*/
|
|
260
|
+
getDay() {
|
|
261
|
+
return this.#targetDate.getDay();
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* 转换为 ISO 格式的字符串
|
|
265
|
+
* @returns ISO 格式的时间字符串
|
|
266
|
+
*/
|
|
267
|
+
toISOString() {
|
|
268
|
+
return dateFormat(this.#utcDate, "YYYY-MM-DDTHH:mm:ss.SSSZ");
|
|
269
|
+
}
|
|
270
|
+
/**
|
|
271
|
+
* 转换为指定时区的 TimezoneDate 对象
|
|
272
|
+
* @param td - 需要转换的日期对象
|
|
273
|
+
* @param offset - 目标时区分钟偏移量,默认为当前时区
|
|
274
|
+
* @returns 返回一个 TimezoneDate 对象
|
|
275
|
+
* @example
|
|
276
|
+
* ```js
|
|
277
|
+
* // 转换为 UTC 时间
|
|
278
|
+
* const utc0Td = TimezoneDate.changeUtcOffset(new TimezoneDate(), 0);
|
|
279
|
+
*
|
|
280
|
+
* // 转换为东八区时间
|
|
281
|
+
* const utc8Td = TimezoneDate.changeUtcOffset(new TimezoneDate(), 8);
|
|
282
|
+
* ```
|
|
283
|
+
*/
|
|
284
|
+
static changeUtcOffset(td, utcOffset) {
|
|
285
|
+
return new TimezoneDate({
|
|
286
|
+
utcOffset,
|
|
287
|
+
timestamp: td.getTime()
|
|
288
|
+
});
|
|
289
|
+
}
|
|
290
|
+
/**
|
|
291
|
+
* 获取时区分钟偏移量
|
|
292
|
+
* @param utcOffset - 默认使用当前时区
|
|
293
|
+
* @returns 时区分钟偏移量
|
|
294
|
+
*/
|
|
295
|
+
static getTimezoneOffset(utcOffset) {
|
|
296
|
+
return require_type.isNumber(utcOffset) ? utcOffset * -60 : (/* @__PURE__ */ new Date()).getTimezoneOffset();
|
|
297
|
+
}
|
|
298
|
+
/**
|
|
299
|
+
* 获取时区序号
|
|
300
|
+
* @param timezoneOffset - 默认使用当前时区分钟偏移量
|
|
301
|
+
* @returns 时区序号
|
|
302
|
+
*/
|
|
303
|
+
static getUTCOffset(timezoneOffset = TimezoneDate.getTimezoneOffset()) {
|
|
304
|
+
return timezoneOffset / -60;
|
|
305
|
+
}
|
|
306
|
+
};
|
|
307
|
+
//#endregion
|
|
308
|
+
//#region src/date/core.ts
|
|
309
|
+
/**
|
|
310
|
+
* 判断一个值是否为有效的日期对象
|
|
311
|
+
* @param unknown - 需要判断的值
|
|
312
|
+
* @returns 如果值是有效的日期对象则返回 true,否则返回 false
|
|
313
|
+
* @example
|
|
314
|
+
* ```typescript
|
|
315
|
+
* isValidDate(new Date()); // true
|
|
316
|
+
* isValidDate('2023-01-01'); // false
|
|
317
|
+
* isValidDate(NaN); // false
|
|
318
|
+
* ```
|
|
319
|
+
*/
|
|
320
|
+
function isValidDate(unknown) {
|
|
321
|
+
return unknown instanceof Date && !Number.isNaN(unknown.getTime()) || unknown instanceof TimezoneDate && !Number.isNaN(unknown.getTime());
|
|
322
|
+
}
|
|
323
|
+
function _guessDateSeparator(value) {
|
|
324
|
+
if (!require_type.isString(value)) return;
|
|
325
|
+
const value2 = value.replace(/-/g, "/");
|
|
326
|
+
return new Date(value2);
|
|
327
|
+
}
|
|
328
|
+
function _guessDateTimezone(value) {
|
|
329
|
+
if (!require_type.isString(value)) return;
|
|
330
|
+
const re = /([+-])(\d\d)(\d\d)$/;
|
|
331
|
+
const matches = re.exec(value);
|
|
332
|
+
if (!matches) return;
|
|
333
|
+
const value2 = value.replace(re, "Z");
|
|
334
|
+
const d = new Date(value2);
|
|
335
|
+
if (!isValidDate(d)) return;
|
|
336
|
+
const [, flag, hours, minutes] = matches;
|
|
337
|
+
const hours2 = Number.parseInt(hours, 10);
|
|
338
|
+
const minutes2 = Number.parseInt(minutes, 10);
|
|
339
|
+
const offset = (a, b) => flag === "+" ? a - b : a + b;
|
|
340
|
+
d.setHours(offset(d.getHours(), hours2));
|
|
341
|
+
d.setMinutes(offset(d.getMinutes(), minutes2));
|
|
342
|
+
return d;
|
|
343
|
+
}
|
|
344
|
+
/**
|
|
345
|
+
* 解析为Date对象
|
|
346
|
+
* @param dateValue - 可以是数值、字符串或 Date 对象
|
|
347
|
+
* @returns 解析后的 Date 对象
|
|
348
|
+
* @throws {SyntaxError} 如果无法解析为有效的日期对象,则抛出错误
|
|
349
|
+
* @example
|
|
350
|
+
* ```typescript
|
|
351
|
+
* dateParse('2023-01-01'); // Date对象
|
|
352
|
+
* dateParse(1672531200000); // Date对象
|
|
353
|
+
* dateParse(new Date()); // Date对象
|
|
354
|
+
* dateParse('invalid date'); // 抛出 SyntaxError
|
|
355
|
+
* ```
|
|
356
|
+
*/
|
|
357
|
+
function dateParse(dateValue) {
|
|
358
|
+
const d1 = require_type.isDate(dateValue) ? new Date(dateValue) : dateValue instanceof TimezoneDate ? new TimezoneDate(dateValue) : new Date(dateValue);
|
|
359
|
+
if (isValidDate(d1)) return d1;
|
|
360
|
+
const d2 = _guessDateSeparator(dateValue);
|
|
361
|
+
if (isValidDate(d2)) return d2;
|
|
362
|
+
const d3 = _guessDateTimezone(dateValue);
|
|
363
|
+
if (isValidDate(d3)) return d3;
|
|
364
|
+
throw new SyntaxError(`${dateValue.toString()} 不是一个合法的日期值`);
|
|
365
|
+
}
|
|
366
|
+
function _pad(num, len = 2) {
|
|
367
|
+
return `${num}`.padStart(len, "0");
|
|
368
|
+
}
|
|
369
|
+
var rules = [
|
|
370
|
+
[/Y{4}/gi, (date) => date.getFullYear()],
|
|
371
|
+
[/Y{2}/gi, (date) => date.getFullYear() % 100],
|
|
372
|
+
[/M{2}/g, (date) => _pad(date.getMonth() + 1)],
|
|
373
|
+
[/M{1}/g, (date) => date.getMonth() + 1],
|
|
374
|
+
[/D{2}/gi, (date) => _pad(date.getDate())],
|
|
375
|
+
[/D{1}/gi, (date) => date.getDate()],
|
|
376
|
+
[/H{2}/g, (date) => _pad(date.getHours())],
|
|
377
|
+
[/H{1}/g, (date) => date.getHours()],
|
|
378
|
+
[/h{2}/g, (date) => {
|
|
379
|
+
const h = date.getHours();
|
|
380
|
+
return _pad(h === 0 ? 12 : h > 12 ? h - 12 : h);
|
|
381
|
+
}],
|
|
382
|
+
[/h{1}/g, (date) => {
|
|
383
|
+
const h = date.getHours();
|
|
384
|
+
return h === 0 ? 12 : h > 12 ? h - 12 : h;
|
|
385
|
+
}],
|
|
386
|
+
[/m{2}/g, (date) => _pad(date.getMinutes())],
|
|
387
|
+
[/m{1}/g, (date) => date.getMinutes()],
|
|
388
|
+
[/s{2}/g, (date) => _pad(date.getSeconds())],
|
|
389
|
+
[/s{1}/g, (date) => date.getSeconds()],
|
|
390
|
+
[/S{3}/g, (date) => _pad(date.getMilliseconds(), 3)],
|
|
391
|
+
[/S{2}/g, (date) => _pad(date.getMilliseconds(), 2)],
|
|
392
|
+
[/S{1}/g, (date) => date.getMilliseconds()]
|
|
393
|
+
];
|
|
394
|
+
/**
|
|
395
|
+
* 格式化为日期字符串(带自定义格式化模板)
|
|
396
|
+
* @param dateValue - 可以是数值、字符串或 Date 对象
|
|
397
|
+
* @param format - 模板,默认是 'YYYY-MM-DD HH:mm:ss',模板字符:
|
|
398
|
+
* - YYYY:年
|
|
399
|
+
* - yyyy: 年
|
|
400
|
+
* - MM:月
|
|
401
|
+
* - DD:日
|
|
402
|
+
* - dd: 日
|
|
403
|
+
* - HH:时(24 小时制)
|
|
404
|
+
* - hh:时(12 小时制)
|
|
405
|
+
* - mm:分
|
|
406
|
+
* - ss:秒
|
|
407
|
+
* - SSS:毫秒
|
|
408
|
+
* @returns 格式化后的日期字符串
|
|
409
|
+
* @example
|
|
410
|
+
* ```typescript
|
|
411
|
+
* dateFormat(new Date(), 'YYYY-MM-DD'); // '2023-01-01'
|
|
412
|
+
* dateFormat(1672531200000, 'YYYY/MM/DD HH:mm:ss'); // '2023/01/01 00:00:00'
|
|
413
|
+
* dateFormat('2023-01-01', 'YYYY年MM月DD日'); // '2023年01月01日'
|
|
414
|
+
* ```
|
|
415
|
+
*/
|
|
416
|
+
function dateFormat(dateValue, format = "YYYY-MM-DD HH:mm:ss") {
|
|
417
|
+
const date = dateParse(dateValue);
|
|
418
|
+
let result = format;
|
|
419
|
+
for (const rule of rules) result = result.replace(rule[0], String(rule[1](date)));
|
|
420
|
+
return result;
|
|
421
|
+
}
|
|
422
|
+
//#endregion
|
|
423
|
+
//#region src/date/start-end.ts
|
|
424
|
+
/**
|
|
425
|
+
* 各时间单位起始时间映射表
|
|
426
|
+
* 包含将日期设置到单位起始时间的函数
|
|
427
|
+
*/
|
|
428
|
+
var dateOfStartMap = [
|
|
429
|
+
["s", (d) => d.setMilliseconds(0)],
|
|
430
|
+
["m", (d) => d.setSeconds(0)],
|
|
431
|
+
["h", (d) => d.setMinutes(0)],
|
|
432
|
+
["D", (d) => d.setHours(0)],
|
|
433
|
+
["W", (d) => d.setDate(d.getDate() - (d.getDay() + 6) % 7)],
|
|
434
|
+
["M", (d) => d.setDate(1)],
|
|
435
|
+
["Y", (d) => d.setMonth(0)]
|
|
15
436
|
];
|
|
437
|
+
/**
|
|
438
|
+
* 返回指定时间单位的起始时间
|
|
439
|
+
* @param dateValue - 可以是数值、字符串或 Date 对象
|
|
440
|
+
* @param symbol - 时间单位符号,可选值为 'Y'(年)、'M'(月)、'W'(周)、'D'(天)、'h'(小时)、'm'(分钟)、's'(秒),默认为 'D'
|
|
441
|
+
* @returns 返回指定时间单位的起始时间
|
|
442
|
+
* @example
|
|
443
|
+
* ```typescript
|
|
444
|
+
* const date = new Date(2023, 5, 15, 12, 30, 45, 500); // 2023-06-15 12:30:45.500
|
|
445
|
+
*
|
|
446
|
+
* // 返回秒级起始时间
|
|
447
|
+
* dateOfStart(date, 's'); // 2023-06-15 12:30:45.000
|
|
448
|
+
*
|
|
449
|
+
* // 返回分钟级起始时间
|
|
450
|
+
* dateOfStart(date, 'm'); // 2023-06-15 12:30:00.000
|
|
451
|
+
*
|
|
452
|
+
* // 返回小时级起始时间
|
|
453
|
+
* dateOfStart(date, 'h'); // 2023-06-15 12:00:00.000
|
|
454
|
+
*
|
|
455
|
+
* // 返回天级起始时间
|
|
456
|
+
* dateOfStart(date, 'D'); // 2023-06-15 00:00:00.000
|
|
457
|
+
*
|
|
458
|
+
* // 返回周级起始时间(周一)
|
|
459
|
+
* dateOfStart(date, 'W'); // 2023-06-12 00:00:00.000
|
|
460
|
+
*
|
|
461
|
+
* // 返回月级起始时间
|
|
462
|
+
* dateOfStart(date, 'M'); // 2023-06-01 00:00:00.000
|
|
463
|
+
*
|
|
464
|
+
* // 返回年级起始时间
|
|
465
|
+
* dateOfStart(date, 'Y'); // 2023-01-01 00:00:00.000
|
|
466
|
+
*
|
|
467
|
+
* // 默认返回天级起始时间
|
|
468
|
+
* dateOfStart(date); // 2023-06-15 00:00:00.000
|
|
469
|
+
* ```
|
|
470
|
+
*/
|
|
16
471
|
function _dateStart(dateValue, symbol = "D") {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
472
|
+
const date = dateParse(dateValue);
|
|
473
|
+
for (const [sym, fn] of dateOfStartMap) {
|
|
474
|
+
fn(date);
|
|
475
|
+
if (symbol === sym) break;
|
|
476
|
+
}
|
|
477
|
+
return date;
|
|
23
478
|
}
|
|
479
|
+
/**
|
|
480
|
+
* 返回秒级起始时间
|
|
481
|
+
* @param dateValue - 可以是数值、字符串或 Date 对象
|
|
482
|
+
* @returns 返回秒级起始时间,毫秒部分为 0
|
|
483
|
+
*/
|
|
24
484
|
function dateStartInSecond(dateValue) {
|
|
25
|
-
|
|
485
|
+
return _dateStart(dateValue, "s");
|
|
26
486
|
}
|
|
487
|
+
/**
|
|
488
|
+
* 返回分钟级起始时间
|
|
489
|
+
* @param dateValue - 可以是数值、字符串或 Date 对象
|
|
490
|
+
* @returns 返回分钟级起始时间,秒和毫秒部分为 0
|
|
491
|
+
*/
|
|
27
492
|
function dateStartInMinute(dateValue) {
|
|
28
|
-
|
|
493
|
+
return _dateStart(dateValue, "m");
|
|
29
494
|
}
|
|
495
|
+
/**
|
|
496
|
+
* 返回小时级起始时间
|
|
497
|
+
* @param dateValue - 可以是数值、字符串或 Date 对象
|
|
498
|
+
* @returns 返回小时级起始时间,分钟、秒和毫秒部分为 0
|
|
499
|
+
*/
|
|
30
500
|
function dateStartInHour(dateValue) {
|
|
31
|
-
|
|
501
|
+
return _dateStart(dateValue, "h");
|
|
32
502
|
}
|
|
503
|
+
/**
|
|
504
|
+
* 返回天级起始时间
|
|
505
|
+
* @param dateValue - 可以是数值、字符串或 Date 对象
|
|
506
|
+
* @returns 返回天级起始时间,小时、分钟、秒和毫秒部分为 0
|
|
507
|
+
*/
|
|
33
508
|
function dateStartInDay(dateValue) {
|
|
34
|
-
|
|
509
|
+
return _dateStart(dateValue, "D");
|
|
35
510
|
}
|
|
511
|
+
/**
|
|
512
|
+
* 返回周级起始时间(周一 00:00:00.000)
|
|
513
|
+
* @param dateValue - 可以是数值、字符串或 Date 对象
|
|
514
|
+
* @returns 返回当周周一的起始时间,时间部分为 0
|
|
515
|
+
*/
|
|
36
516
|
function dateStartInWeek(dateValue) {
|
|
37
|
-
|
|
517
|
+
return _dateStart(dateValue, "W");
|
|
38
518
|
}
|
|
519
|
+
/**
|
|
520
|
+
* 返回月级起始时间
|
|
521
|
+
* @param dateValue - 可以是数值、字符串或 Date 对象
|
|
522
|
+
* @returns 返回月级起始时间,日期为当月第一天,时间部分为 0
|
|
523
|
+
*/
|
|
39
524
|
function dateStartInMonth(dateValue) {
|
|
40
|
-
|
|
525
|
+
return _dateStart(dateValue, "M");
|
|
41
526
|
}
|
|
527
|
+
/**
|
|
528
|
+
* 返回年级起始时间
|
|
529
|
+
* @param dateValue - 可以是数值、字符串或 Date 对象
|
|
530
|
+
* @returns 返回年级起始时间,月份为 1 月,日期为 1 日,时间部分为 0
|
|
531
|
+
*/
|
|
42
532
|
function dateStartInYear(dateValue) {
|
|
43
|
-
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
}
|
|
66
|
-
]
|
|
533
|
+
return _dateStart(dateValue, "Y");
|
|
534
|
+
}
|
|
535
|
+
/**
|
|
536
|
+
* 各时间单位结束时间映射表
|
|
537
|
+
* 包含将日期设置到单位结束时间的函数
|
|
538
|
+
*/
|
|
539
|
+
var dateOfEndMap = [
|
|
540
|
+
["s", (d) => d.setMilliseconds(999)],
|
|
541
|
+
["m", (d) => d.setSeconds(59)],
|
|
542
|
+
["h", (d) => d.setMinutes(59)],
|
|
543
|
+
["D", (d) => d.setHours(23)],
|
|
544
|
+
["W", (d) => d.setDate(d.getDate() + (7 - d.getDay()) % 7)],
|
|
545
|
+
["M", (d) => {
|
|
546
|
+
const d2 = dateParse(d);
|
|
547
|
+
d2.setMonth(d.getMonth() + 1);
|
|
548
|
+
d2.setDate(0);
|
|
549
|
+
d.setDate(d2.getDate());
|
|
550
|
+
}],
|
|
551
|
+
["Y", (d) => {
|
|
552
|
+
d.setMonth(11);
|
|
553
|
+
d.setDate(31);
|
|
554
|
+
}]
|
|
67
555
|
];
|
|
556
|
+
/**
|
|
557
|
+
* 返回指定时间单位的结束时间
|
|
558
|
+
* @param dateValue - 可以是数值、字符串或 Date 对象
|
|
559
|
+
* @param symbol - 时间单位符号,可选值为 'Y'(年)、'M'(月)、'W'(周)、'D'(天)、'h'(小时)、'm'(分钟)、's'(秒),默认为 'D'
|
|
560
|
+
* @returns 返回指定时间单位的结束时间
|
|
561
|
+
* @example
|
|
562
|
+
* ```typescript
|
|
563
|
+
* const date = new Date(2023, 5, 15, 12, 30, 45, 500); // 2023-06-15 12:30:45.500
|
|
564
|
+
*
|
|
565
|
+
* // 返回秒级结束时间
|
|
566
|
+
* dateOfEnd(date, 's'); // 2023-06-15 12:30:45.999
|
|
567
|
+
*
|
|
568
|
+
* // 返回分钟级结束时间
|
|
569
|
+
* dateOfEnd(date, 'm'); // 2023-06-15 12:30:59.999
|
|
570
|
+
*
|
|
571
|
+
* // 返回小时级结束时间
|
|
572
|
+
* dateOfEnd(date, 'h'); // 2023-06-15 12:59:59.999
|
|
573
|
+
*
|
|
574
|
+
* // 返回天级结束时间
|
|
575
|
+
* dateOfEnd(date, 'D'); // 2023-06-15 23:59:59.999
|
|
576
|
+
*
|
|
577
|
+
* // 返回周级结束时间(周日)
|
|
578
|
+
* dateOfEnd(date, 'W'); // 2023-06-18 23:59:59.999
|
|
579
|
+
*
|
|
580
|
+
* // 返回月级结束时间
|
|
581
|
+
* dateOfEnd(date, 'M'); // 2023-06-30 23:59:59.999
|
|
582
|
+
*
|
|
583
|
+
* // 返回年级结束时间
|
|
584
|
+
* dateOfEnd(date, 'Y'); // 2023-12-31 23:59:59.999
|
|
585
|
+
*
|
|
586
|
+
* // 默认返回天级结束时间
|
|
587
|
+
* dateOfEnd(date); // 2023-06-15 23:59:59.999
|
|
588
|
+
* ```
|
|
589
|
+
*/
|
|
68
590
|
function _dateEnd(dateValue, symbol = "D") {
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
591
|
+
const date = dateParse(dateValue);
|
|
592
|
+
for (const [sym, fn] of dateOfEndMap) {
|
|
593
|
+
fn(date);
|
|
594
|
+
if (symbol === sym) break;
|
|
595
|
+
}
|
|
596
|
+
return date;
|
|
75
597
|
}
|
|
598
|
+
/**
|
|
599
|
+
* 返回秒级结束时间
|
|
600
|
+
* @param dateValue - 可以是数值、字符串或 Date 对象
|
|
601
|
+
* @returns 返回秒级结束时间,毫秒部分为 999
|
|
602
|
+
*/
|
|
76
603
|
function dateEndInSecond(dateValue) {
|
|
77
|
-
|
|
604
|
+
return _dateEnd(dateValue, "s");
|
|
78
605
|
}
|
|
606
|
+
/**
|
|
607
|
+
* 返回分钟级结束时间
|
|
608
|
+
* @param dateValue - 可以是数值、字符串或 Date 对象
|
|
609
|
+
* @returns 返回分钟级结束时间,秒为 59,毫秒为 999
|
|
610
|
+
*/
|
|
79
611
|
function dateEndInMinute(dateValue) {
|
|
80
|
-
|
|
612
|
+
return _dateEnd(dateValue, "m");
|
|
81
613
|
}
|
|
614
|
+
/**
|
|
615
|
+
* 返回小时级结束时间
|
|
616
|
+
* @param dateValue - 可以是数值、字符串或 Date 对象
|
|
617
|
+
* @returns 返回小时级结束时间,分钟为 59,秒为 59,毫秒为 999
|
|
618
|
+
*/
|
|
82
619
|
function dateEndInHour(dateValue) {
|
|
83
|
-
|
|
620
|
+
return _dateEnd(dateValue, "h");
|
|
84
621
|
}
|
|
622
|
+
/**
|
|
623
|
+
* 返回天级结束时间
|
|
624
|
+
* @param dateValue - 可以是数值、字符串或 Date 对象
|
|
625
|
+
* @returns 返回天级结束时间,小时为 23,分钟为 59,秒为 59,毫秒为 999
|
|
626
|
+
*/
|
|
85
627
|
function dateEndInDay(dateValue) {
|
|
86
|
-
|
|
628
|
+
return _dateEnd(dateValue, "D");
|
|
87
629
|
}
|
|
630
|
+
/**
|
|
631
|
+
* 返回周级结束时间(周日 23:59:59.999)
|
|
632
|
+
* @param dateValue - 可以是数值、字符串或 Date 对象
|
|
633
|
+
* @returns 返回当周周日的结束时间,时间为 23:59:59.999
|
|
634
|
+
*/
|
|
88
635
|
function dateEndInWeek(dateValue) {
|
|
89
|
-
|
|
636
|
+
return _dateEnd(dateValue, "W");
|
|
90
637
|
}
|
|
638
|
+
/**
|
|
639
|
+
* 返回月级结束时间
|
|
640
|
+
* @param dateValue - 可以是数值、字符串或 Date 对象
|
|
641
|
+
* @returns 返回月级结束时间,日期为当月最后一天,时间为 23:59:59.999
|
|
642
|
+
*/
|
|
91
643
|
function dateEndInMonth(dateValue) {
|
|
92
|
-
|
|
644
|
+
return _dateEnd(dateValue, "M");
|
|
93
645
|
}
|
|
646
|
+
/**
|
|
647
|
+
* 返回年级结束时间
|
|
648
|
+
* @param dateValue - 可以是数值、字符串或 Date 对象
|
|
649
|
+
* @returns 返回年级结束时间,月份为 12 月,日期为 31 日,时间为 23:59:59.999
|
|
650
|
+
*/
|
|
94
651
|
function dateEndInYear(dateValue) {
|
|
95
|
-
|
|
652
|
+
return _dateEnd(dateValue, "Y");
|
|
96
653
|
}
|
|
654
|
+
//#endregion
|
|
655
|
+
//#region src/date/days.ts
|
|
656
|
+
/**
|
|
657
|
+
* 计算指定日期所在年或月的天数
|
|
658
|
+
* @param dateValue - 可以是数值、字符串或 Date 对象
|
|
659
|
+
* @param unit - 时间单位符号,可选值为 'Y'(年)、'M'(月),默认为 'M'
|
|
660
|
+
* @returns 返回指定日期所在年或月的天数
|
|
661
|
+
* @example
|
|
662
|
+
* ```typescript
|
|
663
|
+
* dateDays(new Date('2023-02-15')); // 28
|
|
664
|
+
* dateDays(new Date('2024-02-15')); // 29 (闰年)
|
|
665
|
+
* dateDays(new Date('2023-02-15'), 'Y'); // 365
|
|
666
|
+
* dateDays(new Date('2024-02-15'), 'Y'); // 366 (闰年)
|
|
667
|
+
* ```
|
|
668
|
+
*/
|
|
97
669
|
function _dateDays(dateValue, unit) {
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
670
|
+
const d = dateParse(dateValue);
|
|
671
|
+
const ds = unit === "M" ? dateStartInMonth(d) : dateStartInYear(d);
|
|
672
|
+
const de = unit === "M" ? dateEndInMonth(d) : dateEndInYear(d);
|
|
673
|
+
return Math.ceil((de.getTime() - ds.getTime()) / DATE_DAY_MS);
|
|
102
674
|
}
|
|
675
|
+
/**
|
|
676
|
+
* 计算指定日期所在月份的天数
|
|
677
|
+
* @param dateValue - 可以是数值、字符串或 Date 对象
|
|
678
|
+
* @returns 返回指定日期所在月份的天数
|
|
679
|
+
* @example
|
|
680
|
+
* ```typescript
|
|
681
|
+
* dateDaysInMonth(new Date('2023-02-15')); // 28
|
|
682
|
+
* dateDaysInMonth(new Date('2024-02-15')); // 29 (闰年)
|
|
683
|
+
* ```
|
|
684
|
+
*/
|
|
103
685
|
function dateDaysInMonth(dateValue) {
|
|
104
|
-
|
|
686
|
+
return _dateDays(dateValue, "M");
|
|
105
687
|
}
|
|
688
|
+
/**
|
|
689
|
+
* 计算指定日期所在年份的天数
|
|
690
|
+
* @param dateValue - 可以是数值、字符串或 Date 对象
|
|
691
|
+
* @returns 返回指定日期所在年份的天数
|
|
692
|
+
* @example
|
|
693
|
+
* ```typescript
|
|
694
|
+
* dateDaysInYear(new Date('2023-02-15')); // 365
|
|
695
|
+
* dateDaysInYear(new Date('2024-02-15')); // 366 (闰年)
|
|
696
|
+
* ```
|
|
697
|
+
*/
|
|
106
698
|
function dateDaysInYear(dateValue) {
|
|
107
|
-
|
|
108
|
-
}
|
|
109
|
-
const defaultDiffTemplates = [
|
|
110
|
-
[0, 10, "刚刚"],
|
|
111
|
-
[1, 60, "{n} 秒前", "{n} 秒后"],
|
|
112
|
-
[60, 60 * 60, "{n} 分钟前", "{n} 分钟后"],
|
|
113
|
-
[60 * 60, 60 * 60 * 24, "{n} 小时前", "{n} 小时后"],
|
|
114
|
-
[0, 60 * 60 * 24 * 2, "昨天", "明天"],
|
|
115
|
-
[0, 60 * 60 * 24 * 3, "前天", "后天"],
|
|
116
|
-
[60 * 60 * 24, 60 * 60 * 24 * 30, "{n} 天前", "{n} 天后"],
|
|
117
|
-
[0, Number.POSITIVE_INFINITY, "YYYY年MM月DD日"]
|
|
118
|
-
];
|
|
119
|
-
function dateRelative(dateValue, refDateValue, templates) {
|
|
120
|
-
const now = Date.now();
|
|
121
|
-
const refDateValueFinal = type.isArray(refDateValue) ? now : refDateValue || now;
|
|
122
|
-
const templatesFinal = type.isArray(templates) ? templates : type.isArray(refDateValue) ? refDateValue : defaultDiffTemplates;
|
|
123
|
-
const d1 = core.dateParse(dateValue);
|
|
124
|
-
const d2 = core.dateParse(refDateValueFinal);
|
|
125
|
-
const diff = d1.getTime() - d2.getTime();
|
|
126
|
-
const isAgo = diff < 0;
|
|
127
|
-
const absDiff = Math.abs(diff);
|
|
128
|
-
let relative = "";
|
|
129
|
-
for (const [base, max, agoTemplate, featureTemplate] of templatesFinal) {
|
|
130
|
-
const unitFinal = base * 1e3;
|
|
131
|
-
const maxFinal = max * 1e3;
|
|
132
|
-
if (absDiff < maxFinal) {
|
|
133
|
-
const template = isAgo ? agoTemplate : featureTemplate || agoTemplate;
|
|
134
|
-
const length = unitFinal === 0 ? 0 : Math.max(Math.floor(absDiff / unitFinal), 1);
|
|
135
|
-
relative = unitFinal === 0 ? core.dateFormat(dateValue, template) : number.stringFormat(template, { n: length });
|
|
136
|
-
break;
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
return relative;
|
|
699
|
+
return _dateDays(dateValue, "Y");
|
|
140
700
|
}
|
|
701
|
+
//#endregion
|
|
702
|
+
//#region src/date/is.ts
|
|
703
|
+
/**
|
|
704
|
+
* 判断给定的年份是否为闰年
|
|
705
|
+
* @param year - 需要判断的年份
|
|
706
|
+
* @returns 如果年份是闰年则返回 true,否则返回 false
|
|
707
|
+
* @example
|
|
708
|
+
* ```typescript
|
|
709
|
+
* isLeapYear(2020); // true
|
|
710
|
+
* isLeapYear(2021); // false
|
|
711
|
+
* isLeapYear(2000); // true
|
|
712
|
+
* isLeapYear(1900); // false
|
|
713
|
+
* ```
|
|
714
|
+
*/
|
|
141
715
|
function isLeapYear(year) {
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
716
|
+
if (year % 4 !== 0) return false;
|
|
717
|
+
if (year % 100 !== 0) return true;
|
|
718
|
+
if (year % 400 !== 0) return false;
|
|
719
|
+
return true;
|
|
146
720
|
}
|
|
721
|
+
/**
|
|
722
|
+
* 比较两个日期在指定精度下是否相同
|
|
723
|
+
* @param date1 - 第一个日期,可以是数值、字符串或 Date 对象
|
|
724
|
+
* @param date2 - 第二个日期,可以是数值、字符串或 Date 对象
|
|
725
|
+
* @param sameSymbol - 比较精度,默认为 'D'(天,即年月日天都相同)
|
|
726
|
+
* @returns 如果两个日期在指定精度下相同则返回 true,否则返回 false
|
|
727
|
+
* @example
|
|
728
|
+
* ```typescript
|
|
729
|
+
* const date1 = new Date(2023, 5, 15, 12, 30, 45, 500);
|
|
730
|
+
* const date2 = new Date(2023, 5, 15, 13, 30, 45, 500);
|
|
731
|
+
*
|
|
732
|
+
* // 比较年份
|
|
733
|
+
* isSameDate(date1, date2, 'Y'); // true
|
|
734
|
+
*
|
|
735
|
+
* // 比较月份(年份也要相同)
|
|
736
|
+
* isSameDate(date1, date2, 'M'); // true
|
|
737
|
+
*
|
|
738
|
+
* // 比较日期(默认,年份、月份也要相同)
|
|
739
|
+
* isSameDate(date1, date2); // true
|
|
740
|
+
*
|
|
741
|
+
* // 比较小时(年、月、日也要相同)
|
|
742
|
+
* isSameDate(date1, date2, 'h'); // false
|
|
743
|
+
*
|
|
744
|
+
* // 比较分钟(年、月、日、小时也要相同)
|
|
745
|
+
* isSameDate(date1, date2, 'm'); // false
|
|
746
|
+
*
|
|
747
|
+
* // 比较秒(年、月、日、小时、分钟也要相同)
|
|
748
|
+
* isSameDate(date1, date2, 's'); // false
|
|
749
|
+
*
|
|
750
|
+
* // 比较毫秒(年、月、日、小时、分钟、秒数也要相同)
|
|
751
|
+
* isSameDate(date1, date2, 'S'); // false
|
|
752
|
+
* ```
|
|
753
|
+
*/
|
|
147
754
|
function _isSameDateIn(date1, date2, sameSymbol = "D") {
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
}
|
|
165
|
-
return true;
|
|
755
|
+
const defines = [
|
|
756
|
+
["Y", (d) => d.getFullYear()],
|
|
757
|
+
["M", (d) => d.getMonth()],
|
|
758
|
+
["D", (d) => d.getDate()],
|
|
759
|
+
["h", (d) => d.getHours()],
|
|
760
|
+
["m", (d) => d.getMinutes()],
|
|
761
|
+
["s", (d) => d.getSeconds()],
|
|
762
|
+
["S", (d) => d.getMilliseconds()]
|
|
763
|
+
];
|
|
764
|
+
const d1 = dateParse(date1);
|
|
765
|
+
const d2 = dateParse(date2);
|
|
766
|
+
for (const [sym, fn] of defines) {
|
|
767
|
+
if (fn(d1) !== fn(d2)) return false;
|
|
768
|
+
if (sym === sameSymbol) break;
|
|
769
|
+
}
|
|
770
|
+
return true;
|
|
166
771
|
}
|
|
772
|
+
/**
|
|
773
|
+
* 比较两个日期的年份是否相同
|
|
774
|
+
* @param date1 - 第一个日期,可以是数值、字符串或 Date 对象
|
|
775
|
+
* @param date2 - 第二个日期,可以是数值、字符串或 Date 对象
|
|
776
|
+
* @returns 如果两个日期的年份相同则返回 true,否则返回 false
|
|
777
|
+
* @example
|
|
778
|
+
* ```typescript
|
|
779
|
+
* const date1 = new Date(2023, 5, 15);
|
|
780
|
+
* const date2 = new Date(2023, 6, 20);
|
|
781
|
+
* isSameDateInYear(date1, date2); // true
|
|
782
|
+
* ```
|
|
783
|
+
*/
|
|
167
784
|
function isSameDateInYear(date1, date2) {
|
|
168
|
-
|
|
785
|
+
return _isSameDateIn(date1, date2, "Y");
|
|
169
786
|
}
|
|
787
|
+
/**
|
|
788
|
+
* 比较两个日期的年份和月份是否相同
|
|
789
|
+
* @param date1 - 第一个日期,可以是数值、字符串或 Date 对象
|
|
790
|
+
* @param date2 - 第二个日期,可以是数值、字符串或 Date 对象
|
|
791
|
+
* @returns 如果两个日期的年份和月份相同则返回 true,否则返回 false
|
|
792
|
+
* @example
|
|
793
|
+
* ```typescript
|
|
794
|
+
* const date1 = new Date(2023, 5, 15);
|
|
795
|
+
* const date2 = new Date(2023, 5, 20);
|
|
796
|
+
* isSameDateInMonth(date1, date2); // true
|
|
797
|
+
* ```
|
|
798
|
+
*/
|
|
170
799
|
function isSameDateInMonth(date1, date2) {
|
|
171
|
-
|
|
800
|
+
return _isSameDateIn(date1, date2, "M");
|
|
172
801
|
}
|
|
802
|
+
/**
|
|
803
|
+
* 比较两个日期的年份、月份和天数是否相同
|
|
804
|
+
* @param date1 - 第一个日期,可以是数值、字符串或 Date 对象
|
|
805
|
+
* @param date2 - 第二个日期,可以是数值、字符串或 Date 对象
|
|
806
|
+
* @returns 如果两个日期的年份、月份和天数相同则返回 true,否则返回 false
|
|
807
|
+
* @example
|
|
808
|
+
* ```typescript
|
|
809
|
+
* const date1 = new Date(2023, 5, 15);
|
|
810
|
+
* const date2 = new Date(2023, 5, 15);
|
|
811
|
+
* isSameDateInDay(date1, date2); // true
|
|
812
|
+
* ```
|
|
813
|
+
*/
|
|
173
814
|
function isSameDateInDay(date1, date2) {
|
|
174
|
-
|
|
815
|
+
return _isSameDateIn(date1, date2, "D");
|
|
175
816
|
}
|
|
817
|
+
/**
|
|
818
|
+
* 比较两个日期的年份、月份、天数和小时是否相同
|
|
819
|
+
* @param date1 - 第一个日期,可以是数值、字符串或 Date 对象
|
|
820
|
+
* @param date2 - 第二个日期,可以是数值、字符串或 Date 对象
|
|
821
|
+
* @returns 如果两个日期的年份、月份、天数和小时相同则返回 true,否则返回 false
|
|
822
|
+
* @example
|
|
823
|
+
* ```typescript
|
|
824
|
+
* const date1 = new Date(2023, 5, 15, 12);
|
|
825
|
+
* const date2 = new Date(2023, 5, 15, 12);
|
|
826
|
+
* isSameDateInHour(date1, date2); // true
|
|
827
|
+
* ```
|
|
828
|
+
*/
|
|
176
829
|
function isSameDateInHour(date1, date2) {
|
|
177
|
-
|
|
830
|
+
return _isSameDateIn(date1, date2, "h");
|
|
178
831
|
}
|
|
832
|
+
/**
|
|
833
|
+
* 比较两个日期的年份、月份、天数、小时和分钟是否相同
|
|
834
|
+
* @param date1 - 第一个日期,可以是数值、字符串或 Date 对象
|
|
835
|
+
* @param date2 - 第二个日期,可以是数值、字符串或 Date 对象
|
|
836
|
+
* @returns 如果两个日期的年份、月份、天数、小时和分钟相同则返回 true,否则返回 false
|
|
837
|
+
* @example
|
|
838
|
+
* ```typescript
|
|
839
|
+
* const date1 = new Date(2023, 5, 15, 12, 30);
|
|
840
|
+
* const date2 = new Date(2023, 5, 15, 12, 30);
|
|
841
|
+
* isSameDateInMinute(date1, date2); // true
|
|
842
|
+
* ```
|
|
843
|
+
*/
|
|
179
844
|
function isSameDateInMinute(date1, date2) {
|
|
180
|
-
|
|
845
|
+
return _isSameDateIn(date1, date2, "m");
|
|
181
846
|
}
|
|
847
|
+
/**
|
|
848
|
+
* 比较两个日期的年份、月份、天数、小时、分钟和秒数是否相同
|
|
849
|
+
* @param date1 - 第一个日期,可以是数值、字符串或 Date 对象
|
|
850
|
+
* @param date2 - 第二个日期,可以是数值、字符串或 Date 对象
|
|
851
|
+
* @returns 如果两个日期的年份、月份、天数、小时、分钟和秒数相同则返回 true,否则返回 false
|
|
852
|
+
* @example
|
|
853
|
+
* ```typescript
|
|
854
|
+
* const date1 = new Date(2023, 5, 15, 12, 30, 45);
|
|
855
|
+
* const date2 = new Date(2023, 5, 15, 12, 30, 45);
|
|
856
|
+
* isSameDateInSecond(date1, date2); // true
|
|
857
|
+
* ```
|
|
858
|
+
*/
|
|
182
859
|
function isSameDateInSecond(date1, date2) {
|
|
183
|
-
|
|
184
|
-
}
|
|
185
|
-
var EWeekStart = /* @__PURE__ */ ((EWeekStart2) => {
|
|
186
|
-
EWeekStart2[EWeekStart2["sunday"] = 0] = "sunday";
|
|
187
|
-
EWeekStart2[EWeekStart2["monday"] = 1] = "monday";
|
|
188
|
-
EWeekStart2[EWeekStart2["tuesday"] = 2] = "tuesday";
|
|
189
|
-
EWeekStart2[EWeekStart2["wednesday"] = 3] = "wednesday";
|
|
190
|
-
EWeekStart2[EWeekStart2["thursday"] = 4] = "thursday";
|
|
191
|
-
EWeekStart2[EWeekStart2["friday"] = 5] = "friday";
|
|
192
|
-
EWeekStart2[EWeekStart2["saturday"] = 6] = "saturday";
|
|
193
|
-
return EWeekStart2;
|
|
194
|
-
})(EWeekStart || {});
|
|
195
|
-
function _dateWeeks(dateValue, type2, weekStart = 0) {
|
|
196
|
-
const date = core.dateParse(dateValue);
|
|
197
|
-
const year = date.getFullYear();
|
|
198
|
-
const month = date.getMonth();
|
|
199
|
-
const firstDate = type2 === "Y" ? new Date(year, 0, 1) : new Date(year, month, 1);
|
|
200
|
-
const firstWeek = firstDate.getDay();
|
|
201
|
-
const days = Math.ceil((date.getTime() - firstDate.getTime()) / _const.DATE_DAY_MS);
|
|
202
|
-
return Math.ceil((firstWeek + days - weekStart) / 7);
|
|
860
|
+
return _isSameDateIn(date1, date2, "s");
|
|
203
861
|
}
|
|
862
|
+
//#endregion
|
|
863
|
+
//#region src/date/relative.ts
|
|
864
|
+
var defaultDiffTemplates = [
|
|
865
|
+
[
|
|
866
|
+
0,
|
|
867
|
+
10,
|
|
868
|
+
"刚刚"
|
|
869
|
+
],
|
|
870
|
+
[
|
|
871
|
+
1,
|
|
872
|
+
60,
|
|
873
|
+
"{n} 秒前",
|
|
874
|
+
"{n} 秒后"
|
|
875
|
+
],
|
|
876
|
+
[
|
|
877
|
+
60,
|
|
878
|
+
3600,
|
|
879
|
+
"{n} 分钟前",
|
|
880
|
+
"{n} 分钟后"
|
|
881
|
+
],
|
|
882
|
+
[
|
|
883
|
+
3600,
|
|
884
|
+
3600 * 24,
|
|
885
|
+
"{n} 小时前",
|
|
886
|
+
"{n} 小时后"
|
|
887
|
+
],
|
|
888
|
+
[
|
|
889
|
+
0,
|
|
890
|
+
3600 * 24 * 2,
|
|
891
|
+
"昨天",
|
|
892
|
+
"明天"
|
|
893
|
+
],
|
|
894
|
+
[
|
|
895
|
+
0,
|
|
896
|
+
3600 * 24 * 3,
|
|
897
|
+
"前天",
|
|
898
|
+
"后天"
|
|
899
|
+
],
|
|
900
|
+
[
|
|
901
|
+
3600 * 24,
|
|
902
|
+
3600 * 24 * 30,
|
|
903
|
+
"{n} 天前",
|
|
904
|
+
"{n} 天后"
|
|
905
|
+
],
|
|
906
|
+
[
|
|
907
|
+
0,
|
|
908
|
+
Number.POSITIVE_INFINITY,
|
|
909
|
+
"YYYY年MM月DD日"
|
|
910
|
+
]
|
|
911
|
+
];
|
|
912
|
+
function dateRelative(dateValue, refDateValue, templates) {
|
|
913
|
+
const now = Date.now();
|
|
914
|
+
const refDateValueFinal = require_type.isArray(refDateValue) ? now : refDateValue || now;
|
|
915
|
+
const templatesFinal = require_type.isArray(templates) ? templates : require_type.isArray(refDateValue) ? refDateValue : defaultDiffTemplates;
|
|
916
|
+
const d1 = dateParse(dateValue);
|
|
917
|
+
const d2 = dateParse(refDateValueFinal);
|
|
918
|
+
const diff = d1.getTime() - d2.getTime();
|
|
919
|
+
const isAgo = diff < 0;
|
|
920
|
+
const absDiff = Math.abs(diff);
|
|
921
|
+
let relative = "";
|
|
922
|
+
for (const [base, max, agoTemplate, featureTemplate] of templatesFinal) {
|
|
923
|
+
const unitFinal = base * 1e3;
|
|
924
|
+
if (absDiff < max * 1e3) {
|
|
925
|
+
const template = isAgo ? agoTemplate : featureTemplate || agoTemplate;
|
|
926
|
+
const length = unitFinal === 0 ? 0 : Math.max(Math.floor(absDiff / unitFinal), 1);
|
|
927
|
+
relative = unitFinal === 0 ? dateFormat(dateValue, template) : require_string.stringFormat(template, { n: length });
|
|
928
|
+
break;
|
|
929
|
+
}
|
|
930
|
+
}
|
|
931
|
+
return relative;
|
|
932
|
+
}
|
|
933
|
+
//#endregion
|
|
934
|
+
//#region src/date/weeks.ts
|
|
935
|
+
var EWeekStart = /* @__PURE__ */ function(EWeekStart) {
|
|
936
|
+
/**
|
|
937
|
+
* 周日作为一周的起始日
|
|
938
|
+
*/
|
|
939
|
+
EWeekStart[EWeekStart["sunday"] = 0] = "sunday";
|
|
940
|
+
/**
|
|
941
|
+
* 周一作为一周的起始日
|
|
942
|
+
*/
|
|
943
|
+
EWeekStart[EWeekStart["monday"] = 1] = "monday";
|
|
944
|
+
/**
|
|
945
|
+
* 周二作为一周的起始日
|
|
946
|
+
*/
|
|
947
|
+
EWeekStart[EWeekStart["tuesday"] = 2] = "tuesday";
|
|
948
|
+
/**
|
|
949
|
+
* 周三作为一周的起始日
|
|
950
|
+
*/
|
|
951
|
+
EWeekStart[EWeekStart["wednesday"] = 3] = "wednesday";
|
|
952
|
+
/**
|
|
953
|
+
* 周四作为一周的起始日
|
|
954
|
+
*/
|
|
955
|
+
EWeekStart[EWeekStart["thursday"] = 4] = "thursday";
|
|
956
|
+
/**
|
|
957
|
+
* 周五作为一周的起始日
|
|
958
|
+
*/
|
|
959
|
+
EWeekStart[EWeekStart["friday"] = 5] = "friday";
|
|
960
|
+
/**
|
|
961
|
+
* 周六作为一周的起始日
|
|
962
|
+
*/
|
|
963
|
+
EWeekStart[EWeekStart["saturday"] = 6] = "saturday";
|
|
964
|
+
return EWeekStart;
|
|
965
|
+
}({});
|
|
966
|
+
/**
|
|
967
|
+
* 计算指定日期所在年份或月份的周数
|
|
968
|
+
* @param dateValue - 可以是数值、字符串或 Date 对象
|
|
969
|
+
* @param type - 计算范围,'Y' 表示年份,'M' 表示月份
|
|
970
|
+
* @param weekStart - 一周的起始日,默认为 0(周日)
|
|
971
|
+
* @returns 返回指定日期所在年份或月份的周数
|
|
972
|
+
* @example
|
|
973
|
+
* ```typescript
|
|
974
|
+
* const date = new Date(2023, 0, 1); // 2023-01-01
|
|
975
|
+
* _dateWeeks(date, 'Y'); // 1 (计算年份的周数)
|
|
976
|
+
* _dateWeeks(date, 'M'); // 1 (计算月份的周数)
|
|
977
|
+
* _dateWeeks(date, 'Y', 1); // 1 (周一作为一周的起始日,计算年份的周数)
|
|
978
|
+
* ```
|
|
979
|
+
*/
|
|
980
|
+
function _dateWeeks(dateValue, type, weekStart = 0) {
|
|
981
|
+
const date = dateParse(dateValue);
|
|
982
|
+
const year = date.getFullYear();
|
|
983
|
+
const month = date.getMonth();
|
|
984
|
+
const firstDate = type === "Y" ? new Date(year, 0, 1) : new Date(year, month, 1);
|
|
985
|
+
const firstWeek = firstDate.getDay();
|
|
986
|
+
const days = Math.ceil((date.getTime() - firstDate.getTime()) / DATE_DAY_MS);
|
|
987
|
+
return Math.ceil((firstWeek + days - weekStart) / 7);
|
|
988
|
+
}
|
|
989
|
+
/**
|
|
990
|
+
* 计算指定日期所在年份的周数
|
|
991
|
+
* @param dateValue - 可以是数值、字符串或 Date 对象
|
|
992
|
+
* @param weekStart - 一周的起始日,默认为 0(周日)
|
|
993
|
+
* @returns 返回指定日期所在年份的周数
|
|
994
|
+
* @example
|
|
995
|
+
* ```typescript
|
|
996
|
+
* const date = new Date(2023, 0, 1); // 2023-01-01
|
|
997
|
+
* weeksOfYear(date); // 1
|
|
998
|
+
* weeksOfYear(date, 1); // 1 (周一作为一周的起始日)
|
|
999
|
+
* ```
|
|
1000
|
+
*/
|
|
204
1001
|
function weeksOfYear(dateValue, weekStart = 0) {
|
|
205
|
-
|
|
1002
|
+
return _dateWeeks(dateValue, "Y", weekStart);
|
|
206
1003
|
}
|
|
1004
|
+
/**
|
|
1005
|
+
* 计算指定日期所在月份的周数
|
|
1006
|
+
* @param dateValue - 可以是数值、字符串或 Date 对象
|
|
1007
|
+
* @param weekStart - 一周的起始日,默认为 0(周日)
|
|
1008
|
+
* @returns 返回指定日期所在月份的周数
|
|
1009
|
+
* @example
|
|
1010
|
+
* ```typescript
|
|
1011
|
+
* const date = new Date(2023, 0, 1); // 2023-01-01
|
|
1012
|
+
* weeksOfMonth(date); // 1
|
|
1013
|
+
* weeksOfMonth(date, 1); // 1 (周一作为一周的起始日)
|
|
1014
|
+
* ```
|
|
1015
|
+
*/
|
|
207
1016
|
function weeksOfMonth(dateValue, weekStart = 0) {
|
|
208
|
-
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
exports.
|
|
212
|
-
exports.
|
|
213
|
-
exports.
|
|
214
|
-
exports.
|
|
215
|
-
exports.
|
|
216
|
-
exports.
|
|
217
|
-
exports.dateFormat = core.dateFormat;
|
|
218
|
-
exports.dateParse = core.dateParse;
|
|
219
|
-
exports.isValidDate = core.isValidDate;
|
|
1017
|
+
return _dateWeeks(dateValue, "M", weekStart);
|
|
1018
|
+
}
|
|
1019
|
+
//#endregion
|
|
1020
|
+
exports.DATE_DAY_MS = DATE_DAY_MS;
|
|
1021
|
+
exports.DATE_HOUR_MS = DATE_HOUR_MS;
|
|
1022
|
+
exports.DATE_MINUTE_MS = DATE_MINUTE_MS;
|
|
1023
|
+
exports.DATE_MONTH_MS = DATE_MONTH_MS;
|
|
1024
|
+
exports.DATE_SECOND_MS = DATE_SECOND_MS;
|
|
1025
|
+
exports.DATE_YEAR_MS = DATE_YEAR_MS;
|
|
220
1026
|
exports.EWeekStart = EWeekStart;
|
|
1027
|
+
exports.TimezoneDate = TimezoneDate;
|
|
221
1028
|
exports._dateWeeks = _dateWeeks;
|
|
222
1029
|
exports.dateDaysInMonth = dateDaysInMonth;
|
|
223
1030
|
exports.dateDaysInYear = dateDaysInYear;
|
|
@@ -228,6 +1035,8 @@ exports.dateEndInMonth = dateEndInMonth;
|
|
|
228
1035
|
exports.dateEndInSecond = dateEndInSecond;
|
|
229
1036
|
exports.dateEndInWeek = dateEndInWeek;
|
|
230
1037
|
exports.dateEndInYear = dateEndInYear;
|
|
1038
|
+
exports.dateFormat = dateFormat;
|
|
1039
|
+
exports.dateParse = dateParse;
|
|
231
1040
|
exports.dateRelative = dateRelative;
|
|
232
1041
|
exports.dateStartInDay = dateStartInDay;
|
|
233
1042
|
exports.dateStartInHour = dateStartInHour;
|
|
@@ -243,6 +1052,8 @@ exports.isSameDateInMinute = isSameDateInMinute;
|
|
|
243
1052
|
exports.isSameDateInMonth = isSameDateInMonth;
|
|
244
1053
|
exports.isSameDateInSecond = isSameDateInSecond;
|
|
245
1054
|
exports.isSameDateInYear = isSameDateInYear;
|
|
1055
|
+
exports.isValidDate = isValidDate;
|
|
246
1056
|
exports.weeksOfMonth = weeksOfMonth;
|
|
247
1057
|
exports.weeksOfYear = weeksOfYear;
|
|
248
|
-
|
|
1058
|
+
|
|
1059
|
+
//# sourceMappingURL=date.cjs.map
|