@10yun/cv-mobile-ui 0.5.42 → 0.5.44
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/package.json
CHANGED
|
@@ -1,53 +1,96 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
// 将日期字符串转换为日期对象
|
|
11
|
-
const startDate = new Date(startDateStr);
|
|
12
|
-
const endDate = new Date(endDateStr);
|
|
13
|
-
// NaN 防御
|
|
14
|
-
if (isNaN(checkDate) || isNaN(startDate) || isNaN(endDate)) {
|
|
15
|
-
return false;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
return checkDate >= startDate && checkDate <= endDate;
|
|
1
|
+
function parseDateSafe(str) {
|
|
2
|
+
if (str instanceof Date) return str;
|
|
3
|
+
if (typeof str !== 'string') return new Date(str);
|
|
4
|
+
// 标准化各种时间格式:
|
|
5
|
+
// - 替换空格为 T
|
|
6
|
+
// - 替换 / 为 -
|
|
7
|
+
const normalized = str.trim().replace(/\//g, '-').replace(' ', 'T');
|
|
8
|
+
const date = new Date(normalized);
|
|
9
|
+
return isNaN(date) ? new Date(str) : date;
|
|
19
10
|
}
|
|
11
|
+
|
|
20
12
|
/**
|
|
21
|
-
*
|
|
22
|
-
* @param {string}
|
|
13
|
+
* 判断某个时间(年/月/日/时分秒)是否完全包含在范围内
|
|
14
|
+
* @param {string|Date} inputStr
|
|
15
|
+
* - 可为 "2020"、"2020-07"、"2020-07-25"、"2020-07-25 12:00:00"
|
|
23
16
|
* @param {string|Date} startDateStr - 开始时间
|
|
24
17
|
* @param {string|Date} endDateStr - 结束时间
|
|
25
18
|
* @returns {boolean}
|
|
26
19
|
*/
|
|
27
|
-
export function
|
|
28
|
-
const
|
|
29
|
-
const
|
|
30
|
-
|
|
20
|
+
export function cc_date_time_in_scope(inputStr, startDateStr, endDateStr) {
|
|
21
|
+
const startDate = parseDateSafe(startDateStr);
|
|
22
|
+
const endDate = parseDateSafe(endDateStr);
|
|
23
|
+
if (isNaN(startDate) || isNaN(endDate)) {
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
26
|
+
let inputStart, inputEnd;
|
|
31
27
|
|
|
32
|
-
|
|
33
|
-
|
|
28
|
+
if (typeof inputStr === 'string') {
|
|
29
|
+
if (/^\d{4}$/.test(inputStr)) {
|
|
30
|
+
// 年份:整年
|
|
31
|
+
inputStart = new Date(`${inputStr}-01-01T00:00:00`);
|
|
32
|
+
inputEnd = new Date(`${inputStr}-12-31T23:59:59`);
|
|
33
|
+
} else if (/^\d{4}-\d{2}$/.test(inputStr)) {
|
|
34
|
+
// 月份:整月
|
|
35
|
+
const [year, month] = inputStr.split('-').map(Number);
|
|
36
|
+
inputStart = new Date(year, month - 1, 1, 0, 0, 0);
|
|
37
|
+
inputEnd = new Date(year, month, 0, 23, 59, 59);
|
|
38
|
+
} else if (/^\d{4}-\d{2}-\d{2}$/.test(inputStr)) {
|
|
39
|
+
// 日期:整天
|
|
40
|
+
inputStart = new Date(`${inputStr}T00:00:00`);
|
|
41
|
+
inputEnd = new Date(`${inputStr}T23:59:59`);
|
|
42
|
+
} else {
|
|
43
|
+
// 时间点
|
|
44
|
+
const point = new Date(inputStr);
|
|
45
|
+
if (isNaN(point)) return false;
|
|
46
|
+
inputStart = point;
|
|
47
|
+
inputEnd = point;
|
|
48
|
+
}
|
|
49
|
+
} else if (inputStr instanceof Date) {
|
|
50
|
+
inputStart = inputStr;
|
|
51
|
+
inputEnd = inputStr;
|
|
52
|
+
} else {
|
|
53
|
+
return false;
|
|
54
|
+
}
|
|
34
55
|
|
|
35
|
-
return
|
|
56
|
+
return inputStart >= startDate && inputEnd <= endDate;
|
|
36
57
|
}
|
|
37
58
|
/**
|
|
38
59
|
* 判断某个月是否与指定时间范围有交集
|
|
39
|
-
* @param {string}
|
|
60
|
+
* @param {string|Date} inputStr
|
|
61
|
+
* - 可为 "2020"、"2020-07"、"2020-07-25"、"2020-07-25 12:00:00"
|
|
40
62
|
* @param {string|Date} startDateStr - 开始时间
|
|
41
63
|
* @param {string|Date} endDateStr - 结束时间
|
|
42
64
|
* @returns {boolean}
|
|
43
65
|
*/
|
|
44
|
-
export function cc_month_overlap_scope(monthStr, startDateStr, endDateStr) {
|
|
45
|
-
const [year, month] = monthStr.split('-').map(Number);
|
|
46
|
-
const monthStart = new Date(year, month - 1, 1, 0, 0, 0);
|
|
47
|
-
const monthEnd = new Date(year, month, 0, 23, 59, 59);
|
|
48
66
|
|
|
49
|
-
|
|
50
|
-
const
|
|
67
|
+
function cc_date_time_overlap_scope(inputStr, startDateStr, endDateStr) {
|
|
68
|
+
const startDate = parseDateSafe(startDateStr);
|
|
69
|
+
const endDate = parseDateSafe(endDateStr);
|
|
70
|
+
if (isNaN(startDate) || isNaN(endDate)) {
|
|
71
|
+
return false;
|
|
72
|
+
}
|
|
73
|
+
let inputStart, inputEnd;
|
|
51
74
|
|
|
52
|
-
|
|
75
|
+
if (/^\d{4}$/.test(inputStr)) {
|
|
76
|
+
// 年份:2025 → 2025-01-01 ~ 2025-12-31 23:59:59
|
|
77
|
+
inputStart = new Date(`${inputStr}-01-01T00:00:00`);
|
|
78
|
+
inputEnd = new Date(`${inputStr}-12-31T23:59:59`);
|
|
79
|
+
} else if (/^\d{4}-\d{2}$/.test(inputStr)) {
|
|
80
|
+
// 月份:2025-07 → 2025-07-01 ~ 2025-07-31
|
|
81
|
+
const [year, month] = inputStr.split('-').map(Number);
|
|
82
|
+
inputStart = new Date(year, month - 1, 1, 0, 0, 0);
|
|
83
|
+
inputEnd = new Date(year, month, 0, 23, 59, 59); // 当月最后一天
|
|
84
|
+
} else if (/^\d{4}-\d{2}-\d{2}$/.test(inputStr)) {
|
|
85
|
+
// 日期:2025-07-25 → 当天整天
|
|
86
|
+
inputStart = new Date(`${inputStr}T00:00:00`);
|
|
87
|
+
inputEnd = new Date(`${inputStr}T23:59:59`);
|
|
88
|
+
} else {
|
|
89
|
+
// 其他格式:默认作为精确时间点
|
|
90
|
+
const point = new Date(inputStr);
|
|
91
|
+
if (isNaN(point)) return false;
|
|
92
|
+
inputStart = point;
|
|
93
|
+
inputEnd = point;
|
|
94
|
+
}
|
|
95
|
+
return inputEnd >= startDate && inputStart <= endDate;
|
|
53
96
|
}
|