sculp-js 1.19.0 → 1.19.2
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/dist/cjs/array.cjs +1 -1
- package/dist/cjs/async.cjs +1 -1
- package/dist/cjs/base64.cjs +1 -1
- package/dist/cjs/clipboard.cjs +1 -1
- package/dist/cjs/cloneDeep.cjs +1 -1
- package/dist/cjs/cookie.cjs +1 -1
- package/dist/cjs/date.cjs +130 -70
- package/dist/cjs/dom.cjs +1 -1
- package/dist/cjs/download.cjs +1 -1
- package/dist/cjs/file.cjs +1 -1
- package/dist/cjs/func.cjs +1 -1
- package/dist/cjs/index.cjs +3 -3
- package/dist/cjs/isEqual.cjs +1 -1
- package/dist/cjs/math.cjs +1 -1
- package/dist/cjs/number.cjs +1 -1
- package/dist/cjs/object.cjs +1 -1
- package/dist/cjs/path.cjs +1 -1
- package/dist/cjs/qs.cjs +1 -1
- package/dist/cjs/random.cjs +1 -1
- package/dist/cjs/string.cjs +1 -1
- package/dist/cjs/tooltip.cjs +1 -1
- package/dist/cjs/tree.cjs +1 -1
- package/dist/cjs/type.cjs +1 -1
- package/dist/cjs/unicodeToolkit.cjs +19 -19
- package/dist/cjs/unique.cjs +1 -1
- package/dist/cjs/url.cjs +1 -1
- package/dist/cjs/validator.cjs +1 -1
- package/dist/cjs/variable.cjs +1 -1
- package/dist/cjs/watermark.cjs +1 -1
- package/dist/esm/array.mjs +1 -1
- package/dist/esm/async.mjs +1 -1
- package/dist/esm/base64.mjs +1 -1
- package/dist/esm/clipboard.mjs +1 -1
- package/dist/esm/cloneDeep.mjs +1 -1
- package/dist/esm/cookie.mjs +1 -1
- package/dist/esm/date.mjs +130 -78
- package/dist/esm/dom.mjs +1 -1
- package/dist/esm/download.mjs +1 -1
- package/dist/esm/file.mjs +1 -1
- package/dist/esm/func.mjs +1 -1
- package/dist/esm/index.mjs +3 -10
- package/dist/esm/isEqual.mjs +1 -1
- package/dist/esm/math.mjs +1 -1
- package/dist/esm/number.mjs +1 -1
- package/dist/esm/object.mjs +1 -1
- package/dist/esm/path.mjs +1 -1
- package/dist/esm/qs.mjs +1 -1
- package/dist/esm/random.mjs +1 -1
- package/dist/esm/string.mjs +1 -1
- package/dist/esm/tooltip.mjs +1 -1
- package/dist/esm/tree.mjs +1 -1
- package/dist/esm/type.mjs +1 -1
- package/dist/esm/unicodeToolkit.mjs +19 -19
- package/dist/esm/unique.mjs +1 -1
- package/dist/esm/url.mjs +1 -1
- package/dist/esm/validator.mjs +1 -1
- package/dist/esm/variable.mjs +1 -1
- package/dist/esm/watermark.mjs +1 -1
- package/dist/types/date.d.ts +124 -28
- package/dist/types/index.d.ts +58 -0
- package/dist/umd/index.min.js +2 -2
- package/package.json +1 -1
package/dist/cjs/array.cjs
CHANGED
package/dist/cjs/async.cjs
CHANGED
package/dist/cjs/base64.cjs
CHANGED
package/dist/cjs/clipboard.cjs
CHANGED
package/dist/cjs/cloneDeep.cjs
CHANGED
package/dist/cjs/cookie.cjs
CHANGED
package/dist/cjs/date.cjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* sculp-js v1.19.
|
|
2
|
+
* sculp-js v1.19.2
|
|
3
3
|
* (c) 2023-present chandq
|
|
4
4
|
* Released under the MIT License.
|
|
5
5
|
*/
|
|
@@ -115,19 +115,25 @@ function dateToEnd(value) {
|
|
|
115
115
|
return dateParse(d.getTime() - 1);
|
|
116
116
|
}
|
|
117
117
|
/**
|
|
118
|
-
* 格式化为日期对象(带自定义格式化模板)
|
|
118
|
+
* 格式化为日期对象 (带自定义格式化模板)
|
|
119
119
|
* @param {Date} value - 可以是数值、字符串或 Date 对象
|
|
120
120
|
* @param {string} [format] - 模板,默认是 YYYY-MM-DD HH:mm:ss,模板字符:
|
|
121
|
-
* - YYYY:年
|
|
122
|
-
* -
|
|
123
|
-
* -
|
|
124
|
-
* - DD
|
|
125
|
-
* -
|
|
126
|
-
* - HH:时(24
|
|
127
|
-
* -
|
|
128
|
-
* -
|
|
129
|
-
* -
|
|
130
|
-
* -
|
|
121
|
+
* - YYYY/yyyy:年
|
|
122
|
+
* - MM:月(补零)
|
|
123
|
+
* - M:月(不补零)
|
|
124
|
+
* - DD/dd:日(补零)
|
|
125
|
+
* - D/d:日(不补零)
|
|
126
|
+
* - HH:时(24 小时制,补零)
|
|
127
|
+
* - H:时(24 小时制,不补零)
|
|
128
|
+
* - mm:分(补零)
|
|
129
|
+
* - m:分(不补零)
|
|
130
|
+
* - ss:秒(补零)
|
|
131
|
+
* - s:秒(不补零)
|
|
132
|
+
* - SSS:毫秒(3 位)
|
|
133
|
+
* - SS:毫秒(2 位)
|
|
134
|
+
* - S:毫秒(1 位)
|
|
135
|
+
* - ww:中文完整星期(如:周日)
|
|
136
|
+
* - w:中文星期(如:周日)
|
|
131
137
|
* @returns {string} 格式化后的日期字符串
|
|
132
138
|
*/
|
|
133
139
|
function formatDate(value, format = 'YYYY-MM-DD HH:mm:ss') {
|
|
@@ -156,61 +162,113 @@ function formatDate(value, format = 'YYYY-MM-DD HH:mm:ss') {
|
|
|
156
162
|
return fmt;
|
|
157
163
|
}
|
|
158
164
|
/**
|
|
159
|
-
*
|
|
160
|
-
* @param {DateValue} originDate -
|
|
161
|
-
* @param {
|
|
162
|
-
* @
|
|
163
|
-
* @
|
|
165
|
+
* 调整日期(增加或减少特定时间单位)
|
|
166
|
+
* @param {DateValue} originDate - 参考日期,可以是 Date 对象、时间戳或日期字符串
|
|
167
|
+
* @param {CalculateDateOptions} options - 配置项,支持多种时间单位
|
|
168
|
+
* @returns {string | Date} 计算后的日期/日期时间字符串或 Date 对象
|
|
169
|
+
* @example
|
|
170
|
+
* // 基础用法(向后 2 天)
|
|
171
|
+
* adjustDate('2024-01-01', { days: 2 }) // '2024-01-03'
|
|
172
|
+
*
|
|
173
|
+
* // 向前 2 天
|
|
174
|
+
* adjustDate('2024-01-01', { days: -2 }) // '2023-12-30'
|
|
175
|
+
*
|
|
176
|
+
* // 向后 1 年 2 个月 3 天
|
|
177
|
+
* adjustDate('2024-01-01', { years: 1, months: 2, days: 3 }) // '2025-03-04'
|
|
178
|
+
*
|
|
179
|
+
* // 向后 2 周
|
|
180
|
+
* adjustDate('2024-01-01', { weeks: 2 }) // '2024-01-15'
|
|
181
|
+
*
|
|
182
|
+
* // 包含时间(向后 2 天 3 小时 30 分钟)
|
|
183
|
+
* adjustDate('2024-01-01 10:30:00', { days: 2, hours: 3, minutes: 30 }) // '2024-01-03 14:00'
|
|
184
|
+
*
|
|
185
|
+
* // 自定义格式
|
|
186
|
+
* adjustDate('2024-01-01', { days: 2, format: 'YYYY/MM/DD' }) // '2024/01/03'
|
|
187
|
+
* adjustDate('2024-01-01', { days: 2, format: 'YYYY 年 MM 月 DD 日' }) // '2024 年 01 月 03 日'
|
|
188
|
+
*
|
|
189
|
+
* // 时间戳输入
|
|
190
|
+
* adjustDate(1717330884896, { days: 2 }) // '2024-06-04'
|
|
191
|
+
*
|
|
192
|
+
* // 精确到毫秒
|
|
193
|
+
* adjustDate('2024-01-01 10:30:00', { hours: 1, minutes: 30, seconds: 45, milliseconds: 500 })
|
|
194
|
+
*
|
|
195
|
+
* // 返回 Date 对象
|
|
196
|
+
* adjustDate('2024-01-01', { days: 2, returnDate: true }) // Date 对象
|
|
164
197
|
*/
|
|
165
|
-
function
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
198
|
+
function adjustDate(originDate, options = {}) {
|
|
199
|
+
const {
|
|
200
|
+
format,
|
|
201
|
+
returnDate = false,
|
|
202
|
+
years = 0,
|
|
203
|
+
months = 0,
|
|
204
|
+
weeks = 0,
|
|
205
|
+
days = 0,
|
|
206
|
+
hours = 0,
|
|
207
|
+
minutes = 0,
|
|
208
|
+
seconds = 0,
|
|
209
|
+
milliseconds = 0
|
|
210
|
+
} = options;
|
|
211
|
+
const date = dateParse(originDate);
|
|
212
|
+
const targetDate = new Date(date);
|
|
213
|
+
// 保存原始日期以便处理月末边界
|
|
214
|
+
const originalDay = date.getDate();
|
|
215
|
+
const originalMonthDays = new Date(date.getFullYear(), date.getMonth() + 1, 0).getDate();
|
|
216
|
+
const isEndOfMonth = originalDay === originalMonthDays;
|
|
217
|
+
targetDate.setFullYear(targetDate.getFullYear() + years);
|
|
218
|
+
// 处理月末边界:如果原始日期是月末,需要特殊处理
|
|
219
|
+
if (months !== 0) {
|
|
220
|
+
const targetMonthIndex = targetDate.getMonth() + months;
|
|
221
|
+
const targetMonthDays = new Date(targetDate.getFullYear(), targetMonthIndex + 1, 0).getDate();
|
|
222
|
+
// 先将日期设为 1 号,避免 setMonth 时因日期过大而自动进位
|
|
223
|
+
targetDate.setDate(1);
|
|
224
|
+
targetDate.setMonth(targetMonthIndex);
|
|
225
|
+
// 如果原始日期是月末,则调整为目标月份的月末
|
|
226
|
+
if (isEndOfMonth) {
|
|
227
|
+
targetDate.setDate(targetMonthDays);
|
|
228
|
+
} else if (originalDay > targetMonthDays) {
|
|
229
|
+
// 如果原始日期大于目标月份的最大天数,也调整为目标月份的月末
|
|
230
|
+
targetDate.setDate(targetMonthDays);
|
|
231
|
+
} else {
|
|
232
|
+
// 否则保持原始日期
|
|
233
|
+
targetDate.setDate(originalDay);
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
// 处理天数(不包括月份变化)
|
|
237
|
+
if (days !== 0 || weeks !== 0) {
|
|
238
|
+
targetDate.setDate(targetDate.getDate() + days + weeks * 7);
|
|
239
|
+
}
|
|
240
|
+
targetDate.setHours(targetDate.getHours() + hours);
|
|
241
|
+
targetDate.setMinutes(targetDate.getMinutes() + minutes);
|
|
242
|
+
targetDate.setSeconds(targetDate.getSeconds() + seconds);
|
|
243
|
+
targetDate.setMilliseconds(targetDate.getMilliseconds() + milliseconds);
|
|
244
|
+
if (returnDate) {
|
|
245
|
+
return targetDate;
|
|
246
|
+
}
|
|
247
|
+
if (format) {
|
|
248
|
+
return formatDate(targetDate, format);
|
|
249
|
+
}
|
|
250
|
+
const year = targetDate.getFullYear();
|
|
251
|
+
const month = String(targetDate.getMonth() + 1).padStart(2, '0');
|
|
252
|
+
const day = String(targetDate.getDate()).padStart(2, '0');
|
|
253
|
+
const hoursStr = String(targetDate.getHours()).padStart(2, '0');
|
|
254
|
+
const minutesStr = String(targetDate.getMinutes()).padStart(2, '0');
|
|
255
|
+
const secondsStr = String(targetDate.getSeconds()).padStart(2, '0');
|
|
256
|
+
const hasTimeParam =
|
|
257
|
+
options.hasOwnProperty('hours') ||
|
|
258
|
+
options.hasOwnProperty('minutes') ||
|
|
259
|
+
options.hasOwnProperty('seconds') ||
|
|
260
|
+
options.hasOwnProperty('milliseconds');
|
|
261
|
+
if (hasTimeParam) {
|
|
262
|
+
if (options.hasOwnProperty('milliseconds')) {
|
|
263
|
+
const msStr = String(targetDate.getMilliseconds()).padStart(3, '0');
|
|
264
|
+
return `${year}-${month}-${day} ${hoursStr}:${minutesStr}:${secondsStr}.${msStr}`;
|
|
265
|
+
}
|
|
266
|
+
if (options.hasOwnProperty('seconds')) {
|
|
267
|
+
return `${year}-${month}-${day} ${hoursStr}:${minutesStr}:${secondsStr}`;
|
|
268
|
+
}
|
|
269
|
+
return `${year}-${month}-${day} ${hoursStr}:${minutesStr}`;
|
|
270
|
+
}
|
|
271
|
+
return `${year}-${month}-${day}`;
|
|
214
272
|
}
|
|
215
273
|
var date = {
|
|
216
274
|
isValidDate,
|
|
@@ -218,12 +276,14 @@ var date = {
|
|
|
218
276
|
dateToStart,
|
|
219
277
|
dateToEnd,
|
|
220
278
|
formatDate,
|
|
221
|
-
|
|
222
|
-
|
|
279
|
+
adjustDate,
|
|
280
|
+
/**
|
|
281
|
+
* @deprecated 已废弃,请使用 adjustDate
|
|
282
|
+
*/
|
|
283
|
+
calculateDate: adjustDate
|
|
223
284
|
};
|
|
224
285
|
|
|
225
|
-
exports.
|
|
226
|
-
exports.calculateDateTime = calculateDateTime;
|
|
286
|
+
exports.adjustDate = adjustDate;
|
|
227
287
|
exports.dateParse = dateParse;
|
|
228
288
|
exports.dateToEnd = dateToEnd;
|
|
229
289
|
exports.dateToStart = dateToStart;
|
package/dist/cjs/dom.cjs
CHANGED
package/dist/cjs/download.cjs
CHANGED
package/dist/cjs/file.cjs
CHANGED
package/dist/cjs/func.cjs
CHANGED
package/dist/cjs/index.cjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* sculp-js v1.19.
|
|
2
|
+
* sculp-js v1.19.2
|
|
3
3
|
* (c) 2023-present chandq
|
|
4
4
|
* Released under the MIT License.
|
|
5
5
|
*/
|
|
@@ -37,6 +37,7 @@ var cloneDeep = require('./cloneDeep.cjs');
|
|
|
37
37
|
var isEqual = require('./isEqual.cjs');
|
|
38
38
|
var unicodeToolkit = require('./unicodeToolkit.cjs');
|
|
39
39
|
|
|
40
|
+
// 导出默认对象(使用类型断言避免私有类型问题)
|
|
40
41
|
var index = {
|
|
41
42
|
...array,
|
|
42
43
|
...clipboard,
|
|
@@ -78,8 +79,7 @@ exports.fallbackCopyText = clipboard.fallbackCopyText;
|
|
|
78
79
|
exports.cookieDel = cookie.cookieDel;
|
|
79
80
|
exports.cookieGet = cookie.cookieGet;
|
|
80
81
|
exports.cookieSet = cookie.cookieSet;
|
|
81
|
-
exports.
|
|
82
|
-
exports.calculateDateTime = date.calculateDateTime;
|
|
82
|
+
exports.adjustDate = date.adjustDate;
|
|
83
83
|
exports.dateParse = date.dateParse;
|
|
84
84
|
exports.dateToEnd = date.dateToEnd;
|
|
85
85
|
exports.dateToStart = date.dateToStart;
|
package/dist/cjs/isEqual.cjs
CHANGED
package/dist/cjs/math.cjs
CHANGED
package/dist/cjs/number.cjs
CHANGED
package/dist/cjs/object.cjs
CHANGED
package/dist/cjs/path.cjs
CHANGED
package/dist/cjs/qs.cjs
CHANGED
package/dist/cjs/random.cjs
CHANGED
package/dist/cjs/string.cjs
CHANGED
package/dist/cjs/tooltip.cjs
CHANGED
package/dist/cjs/tree.cjs
CHANGED
package/dist/cjs/type.cjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* sculp-js v1.19.
|
|
2
|
+
* sculp-js v1.19.2
|
|
3
3
|
* (c) 2023-present chandq
|
|
4
4
|
* Released under the MIT License.
|
|
5
5
|
*/
|
|
@@ -12,24 +12,6 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
|
|
|
12
12
|
* 增强型 Unicode/HTML/UTF-8 编码解码工具
|
|
13
13
|
*/
|
|
14
14
|
class UnicodeToolkit {
|
|
15
|
-
// 基础 HTML 实体映射
|
|
16
|
-
static ENTITY_MAP = {
|
|
17
|
-
'&': '&',
|
|
18
|
-
'<': '<',
|
|
19
|
-
'>': '>',
|
|
20
|
-
'"': '"',
|
|
21
|
-
"'": '''
|
|
22
|
-
};
|
|
23
|
-
static NAMED_ENTITIES = {
|
|
24
|
-
'"': '"',
|
|
25
|
-
'&': '&',
|
|
26
|
-
'<': '<',
|
|
27
|
-
'>': '>',
|
|
28
|
-
' ': '\u00A0',
|
|
29
|
-
'©': '©',
|
|
30
|
-
'™': '™',
|
|
31
|
-
'®': '®'
|
|
32
|
-
};
|
|
33
15
|
/**
|
|
34
16
|
* 编码函数
|
|
35
17
|
* @param {string} str 原始字符串
|
|
@@ -117,6 +99,24 @@ class UnicodeToolkit {
|
|
|
117
99
|
return decoded;
|
|
118
100
|
}
|
|
119
101
|
}
|
|
102
|
+
// 基础 HTML 实体映射
|
|
103
|
+
UnicodeToolkit.ENTITY_MAP = {
|
|
104
|
+
'&': '&',
|
|
105
|
+
'<': '<',
|
|
106
|
+
'>': '>',
|
|
107
|
+
'"': '"',
|
|
108
|
+
"'": '''
|
|
109
|
+
};
|
|
110
|
+
UnicodeToolkit.NAMED_ENTITIES = {
|
|
111
|
+
'"': '"',
|
|
112
|
+
'&': '&',
|
|
113
|
+
'<': '<',
|
|
114
|
+
'>': '>',
|
|
115
|
+
' ': '\u00A0',
|
|
116
|
+
'©': '©',
|
|
117
|
+
'™': '™',
|
|
118
|
+
'®': '®'
|
|
119
|
+
};
|
|
120
120
|
var unicodeToolkit = {
|
|
121
121
|
UnicodeToolkit
|
|
122
122
|
};
|
package/dist/cjs/unique.cjs
CHANGED
package/dist/cjs/url.cjs
CHANGED
package/dist/cjs/validator.cjs
CHANGED
package/dist/cjs/variable.cjs
CHANGED
package/dist/cjs/watermark.cjs
CHANGED
package/dist/esm/array.mjs
CHANGED
package/dist/esm/async.mjs
CHANGED
package/dist/esm/base64.mjs
CHANGED
package/dist/esm/clipboard.mjs
CHANGED
package/dist/esm/cloneDeep.mjs
CHANGED
package/dist/esm/cookie.mjs
CHANGED