@ivujs/i-utils 2.0.0 → 2.1.1
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 +40 -42
- package/dist/cjs/ID-card/index.cjs +21 -13
- package/dist/cjs/array/index.cjs +40 -34
- package/dist/cjs/clipboard/index.cjs +14 -10
- package/dist/cjs/color/index.cjs +73 -59
- package/dist/cjs/constants/date.cjs +55 -1
- package/dist/cjs/constants/id-card.cjs +42 -1
- package/dist/cjs/constants/keycode.cjs +117 -2
- package/dist/cjs/constants/lang.cjs +7 -1
- package/dist/cjs/constants/math.cjs +9 -1
- package/dist/cjs/constants/regexp.cjs +33 -10
- package/dist/cjs/constants/sort.cjs +10 -1
- package/dist/cjs/cookie/index.cjs +16 -13
- package/dist/cjs/crypto/base64/base64.cjs +398 -206
- package/dist/cjs/crypto/base64/index.cjs +58 -35
- package/dist/cjs/crypto/md5/index.cjs +33 -8
- package/dist/cjs/crypto/md5/md5.cjs +298 -844
- package/dist/cjs/crypto/sha256/index.cjs +95 -0
- package/dist/cjs/crypto/sha256/sha256.cjs +557 -0
- package/dist/cjs/crypto/sm3/index.cjs +27 -0
- package/dist/cjs/crypto/sm3/sm3.cjs +200 -0
- package/dist/cjs/crypto/sm4/index.cjs +101 -0
- package/dist/cjs/crypto/sm4/sm4.cjs +498 -0
- package/dist/cjs/date/index.cjs +420 -340
- package/dist/cjs/desensitized/index.cjs +21 -18
- package/dist/cjs/device/index.cjs +33 -30
- package/dist/cjs/dom/index.cjs +26 -23
- package/dist/cjs/file/index.cjs +51 -41
- package/dist/cjs/function/index.cjs +22 -19
- package/dist/cjs/id/index.cjs +6 -2
- package/dist/cjs/index.cjs +110 -127
- package/dist/cjs/keycode/index.cjs +9 -12
- package/dist/cjs/math/index.cjs +113 -81
- package/dist/cjs/number/index.cjs +10 -7
- package/dist/cjs/object/index.cjs +77 -30
- package/dist/cjs/pagination/index.cjs +25 -10
- package/dist/cjs/random/index.cjs +8 -5
- package/dist/cjs/regexp/index.cjs +23 -20
- package/dist/cjs/storage/index.cjs +4 -1
- package/dist/cjs/storage/localStorage.cjs +5 -5
- package/dist/cjs/storage/sessionStorage.cjs +6 -6
- package/dist/cjs/string/index.cjs +66 -63
- package/dist/cjs/url/index.cjs +83 -80
- package/dist/cjs/validate/index.cjs +122 -106
- package/dist/es/ID-card/index.d.ts +19 -14
- package/dist/es/ID-card/index.mjs +22 -14
- package/dist/es/array/index.d.ts +56 -50
- package/dist/es/array/index.mjs +40 -34
- package/dist/es/clipboard/index.d.ts +10 -7
- package/dist/es/clipboard/index.mjs +14 -10
- package/dist/es/color/index.d.ts +28 -25
- package/dist/es/color/index.mjs +73 -59
- package/dist/es/constants/date.d.ts +58 -174
- package/dist/es/constants/date.mjs +55 -1
- package/dist/es/constants/id-card.d.ts +45 -43
- package/dist/es/constants/id-card.mjs +42 -1
- package/dist/es/constants/index.d.ts +11 -7
- package/dist/es/constants/keycode.d.ts +119 -103
- package/dist/es/constants/keycode.mjs +117 -2
- package/dist/es/constants/lang.d.ts +10 -4
- package/dist/es/constants/lang.mjs +7 -1
- package/dist/es/constants/math.d.ts +12 -4
- package/dist/es/constants/math.mjs +9 -1
- package/dist/es/constants/regexp.d.ts +27 -24
- package/dist/es/constants/regexp.mjs +33 -10
- package/dist/es/constants/sort.d.ts +13 -5
- package/dist/es/constants/sort.mjs +10 -1
- package/dist/es/cookie/index.d.ts +13 -13
- package/dist/es/cookie/index.mjs +16 -13
- package/dist/es/crypto/base64/base64.d.ts +8 -5
- package/dist/es/crypto/base64/base64.mjs +393 -204
- package/dist/es/crypto/base64/index.d.ts +41 -24
- package/dist/es/crypto/base64/index.mjs +53 -32
- package/dist/es/crypto/index.d.ts +8 -8
- package/dist/es/crypto/md5/index.d.ts +20 -7
- package/dist/es/crypto/md5/index.mjs +32 -9
- package/dist/es/crypto/md5/md5.d.ts +9 -142
- package/dist/es/crypto/md5/md5.mjs +299 -844
- package/dist/es/crypto/sha256/index.d.ts +52 -0
- package/dist/es/crypto/sha256/index.mjs +86 -0
- package/dist/es/crypto/sha256/sha256.d.ts +82 -0
- package/dist/es/crypto/sha256/sha256.mjs +548 -0
- package/dist/es/crypto/sm3/index.d.ts +13 -0
- package/dist/es/crypto/sm3/index.mjs +24 -0
- package/dist/es/crypto/sm3/sm3.d.ts +3 -0
- package/dist/es/crypto/sm3/sm3.mjs +197 -0
- package/dist/es/crypto/sm4/index.d.ts +56 -0
- package/dist/es/crypto/sm4/index.mjs +95 -0
- package/dist/es/crypto/sm4/sm4.d.ts +48 -0
- package/dist/es/crypto/sm4/sm4.mjs +490 -0
- package/dist/es/date/index.d.ts +269 -179
- package/dist/es/date/index.mjs +417 -340
- package/dist/es/desensitized/index.d.ts +26 -23
- package/dist/es/desensitized/index.mjs +21 -18
- package/dist/es/device/index.d.ts +31 -25
- package/dist/es/device/index.mjs +33 -30
- package/dist/es/dom/index.d.ts +32 -29
- package/dist/es/dom/index.mjs +26 -23
- package/dist/es/file/index.d.ts +30 -30
- package/dist/es/file/index.mjs +51 -41
- package/dist/es/function/index.d.ts +10 -7
- package/dist/es/function/index.mjs +22 -19
- package/dist/es/id/index.d.ts +3 -0
- package/dist/es/id/index.mjs +6 -2
- package/dist/es/index.d.ts +24 -25
- package/dist/es/index.mjs +6 -23
- package/dist/es/keycode/index.d.ts +6 -6
- package/dist/es/keycode/index.mjs +9 -12
- package/dist/es/math/index.d.ts +37 -37
- package/dist/es/math/index.mjs +113 -81
- package/dist/es/number/index.d.ts +7 -7
- package/dist/es/number/index.mjs +10 -7
- package/dist/es/object/index.d.ts +20 -19
- package/dist/es/object/index.mjs +77 -30
- package/dist/es/pagination/index.d.ts +39 -6
- package/dist/es/pagination/index.mjs +25 -10
- package/dist/es/random/index.d.ts +10 -7
- package/dist/es/random/index.mjs +8 -5
- package/dist/es/regexp/index.d.ts +30 -30
- package/dist/es/regexp/index.mjs +23 -20
- package/dist/es/storage/index.d.ts +10 -4
- package/dist/es/storage/index.mjs +4 -1
- package/dist/es/storage/localStorage.d.ts +9 -9
- package/dist/es/storage/localStorage.mjs +5 -5
- package/dist/es/storage/sessionStorage.d.ts +9 -9
- package/dist/es/storage/sessionStorage.mjs +6 -6
- package/dist/es/string/index.d.ts +62 -59
- package/dist/es/string/index.mjs +66 -63
- package/dist/es/url/index.d.ts +65 -65
- package/dist/es/url/index.mjs +83 -80
- package/dist/es/validate/index.d.ts +83 -80
- package/dist/es/validate/index.mjs +122 -106
- package/dist/index.d.ts +2643 -2803
- package/dist/lib/index.full.umd.js +3609 -9494
- package/dist/lib/index.full.umd.min.js +2 -64
- package/dist/lib/index.full.umd.min.js.map +1 -1
- package/dist/resolver/auto-imports.cjs +40 -31
- package/dist/resolver/auto-imports.mjs +40 -31
- package/dist/resolver/index.cjs +1 -2
- package/dist/resolver/index.d.ts +1 -1
- package/dist/resolver/index.mjs +1 -2
- package/package.json +96 -90
- package/dist/cjs/crypto/aes/aes.cjs +0 -480
- package/dist/cjs/crypto/aes/index.cjs +0 -27
- package/dist/cjs/crypto/base32/base32.cjs +0 -357
- package/dist/cjs/crypto/base32/index.cjs +0 -41
- package/dist/cjs/crypto/des/des.cjs +0 -257
- package/dist/cjs/crypto/des/index.cjs +0 -28
- package/dist/cjs/crypto/sha/sha1/index.cjs +0 -24
- package/dist/cjs/crypto/sha/sha1/sha1.cjs +0 -529
- package/dist/cjs/crypto/sha/sha256/index.cjs +0 -43
- package/dist/cjs/crypto/sha/sha256/sha256.cjs +0 -595
- package/dist/cjs/crypto/sha/sha3/index.cjs +0 -41
- package/dist/cjs/crypto/sha/sha3/sha3.cjs +0 -624
- package/dist/cjs/crypto/sha/sha512/index.cjs +0 -81
- package/dist/cjs/crypto/sha/sha512/sha512.cjs +0 -950
- package/dist/cjs/crypto/sm/lib/asn1.cjs +0 -149
- package/dist/cjs/crypto/sm/lib/ec.cjs +0 -315
- package/dist/cjs/crypto/sm/lib/jsbn.cjs +0 -1608
- package/dist/cjs/crypto/sm/lib/sm3.cjs +0 -158
- package/dist/cjs/crypto/sm/lib/utils.cjs +0 -170
- package/dist/cjs/crypto/sm/sm2/index.cjs +0 -112
- package/dist/cjs/crypto/sm/sm2/sm2.cjs +0 -231
- package/dist/cjs/crypto/sm/sm3/index.cjs +0 -15
- package/dist/cjs/crypto/sm/sm3/sm3.cjs +0 -93
- package/dist/cjs/crypto/sm/sm4/index.cjs +0 -27
- package/dist/cjs/crypto/sm/sm4/sm4.cjs +0 -327
- package/dist/cjs/crypto/tea/index.cjs +0 -25
- package/dist/cjs/crypto/tea/tea.cjs +0 -187
- package/dist/cjs/weapp/index.cjs +0 -142
- package/dist/es/crypto/aes/aes.d.ts +0 -156
- package/dist/es/crypto/aes/aes.mjs +0 -478
- package/dist/es/crypto/aes/index.d.ts +0 -16
- package/dist/es/crypto/aes/index.mjs +0 -24
- package/dist/es/crypto/base32/base32.d.ts +0 -3
- package/dist/es/crypto/base32/base32.mjs +0 -353
- package/dist/es/crypto/base32/index.d.ts +0 -24
- package/dist/es/crypto/base32/index.mjs +0 -36
- package/dist/es/crypto/des/des.d.ts +0 -52
- package/dist/es/crypto/des/des.mjs +0 -255
- package/dist/es/crypto/des/index.d.ts +0 -14
- package/dist/es/crypto/des/index.mjs +0 -25
- package/dist/es/crypto/sha/index.d.ts +0 -4
- package/dist/es/crypto/sha/sha1/index.d.ts +0 -13
- package/dist/es/crypto/sha/sha1/index.mjs +0 -21
- package/dist/es/crypto/sha/sha1/sha1.d.ts +0 -2
- package/dist/es/crypto/sha/sha1/sha1.mjs +0 -526
- package/dist/es/crypto/sha/sha256/index.d.ts +0 -26
- package/dist/es/crypto/sha/sha256/index.mjs +0 -38
- package/dist/es/crypto/sha/sha256/sha256.d.ts +0 -4
- package/dist/es/crypto/sha/sha256/sha256.mjs +0 -590
- package/dist/es/crypto/sha/sha3/index.d.ts +0 -24
- package/dist/es/crypto/sha/sha3/index.mjs +0 -36
- package/dist/es/crypto/sha/sha3/sha3.d.ts +0 -4
- package/dist/es/crypto/sha/sha3/sha3.mjs +0 -619
- package/dist/es/crypto/sha/sha512/index.d.ts +0 -52
- package/dist/es/crypto/sha/sha512/index.mjs +0 -72
- package/dist/es/crypto/sha/sha512/sha512.d.ts +0 -8
- package/dist/es/crypto/sha/sha512/sha512.mjs +0 -941
- package/dist/es/crypto/sm/index.d.ts +0 -3
- package/dist/es/crypto/sm/lib/asn1.d.ts +0 -12
- package/dist/es/crypto/sm/lib/asn1.mjs +0 -146
- package/dist/es/crypto/sm/lib/ec.d.ts +0 -126
- package/dist/es/crypto/sm/lib/ec.mjs +0 -312
- package/dist/es/crypto/sm/lib/jsbn.d.ts +0 -198
- package/dist/es/crypto/sm/lib/jsbn.mjs +0 -1605
- package/dist/es/crypto/sm/lib/sm3.d.ts +0 -5
- package/dist/es/crypto/sm/lib/sm3.mjs +0 -155
- package/dist/es/crypto/sm/lib/utils.d.ts +0 -53
- package/dist/es/crypto/sm/lib/utils.mjs +0 -158
- package/dist/es/crypto/sm/sm2/index.d.ts +0 -71
- package/dist/es/crypto/sm/sm2/index.mjs +0 -101
- package/dist/es/crypto/sm/sm2/sm2.d.ts +0 -34
- package/dist/es/crypto/sm/sm2/sm2.mjs +0 -220
- package/dist/es/crypto/sm/sm3/index.d.ts +0 -7
- package/dist/es/crypto/sm/sm3/index.mjs +0 -13
- package/dist/es/crypto/sm/sm3/sm3.d.ts +0 -1
- package/dist/es/crypto/sm/sm3/sm3.mjs +0 -91
- package/dist/es/crypto/sm/sm4/index.d.ts +0 -16
- package/dist/es/crypto/sm/sm4/index.mjs +0 -24
- package/dist/es/crypto/sm/sm4/sm4.d.ts +0 -2
- package/dist/es/crypto/sm/sm4/sm4.mjs +0 -324
- package/dist/es/crypto/tea/index.d.ts +0 -14
- package/dist/es/crypto/tea/index.mjs +0 -22
- package/dist/es/crypto/tea/tea.d.ts +0 -69
- package/dist/es/crypto/tea/tea.mjs +0 -185
- package/dist/es/weapp/index.d.ts +0 -57
- package/dist/es/weapp/index.mjs +0 -131
package/dist/es/date/index.mjs
CHANGED
|
@@ -1,82 +1,105 @@
|
|
|
1
|
-
import { isNull, isString,
|
|
1
|
+
import { isNull, isString, isInteger, isDate } from '../validate/index.mjs';
|
|
2
2
|
import { parseInt } from '../number/index.mjs';
|
|
3
3
|
import { DATE } from '../constants/date.mjs';
|
|
4
4
|
|
|
5
|
+
/**
|
|
6
|
+
* @module 日期
|
|
7
|
+
*/
|
|
5
8
|
/* 快捷日期 */
|
|
6
9
|
/**
|
|
7
10
|
* 今天
|
|
8
|
-
*@returns {
|
|
11
|
+
*@returns {string} 返回日期字符串
|
|
9
12
|
*/
|
|
10
13
|
function today() {
|
|
11
14
|
return getDate();
|
|
12
15
|
}
|
|
13
16
|
/**
|
|
14
17
|
* 昨天
|
|
15
|
-
* @returns {
|
|
18
|
+
* @returns {string} 返回日期字符串
|
|
16
19
|
*/
|
|
17
20
|
function yesterday() {
|
|
18
|
-
return
|
|
21
|
+
return toDateString(addDate(new Date(), -1));
|
|
19
22
|
}
|
|
20
23
|
/**
|
|
21
24
|
* 明天
|
|
22
|
-
*@returns {
|
|
25
|
+
*@returns {string} 返回日期字符串
|
|
23
26
|
*/
|
|
24
27
|
function tomorrow() {
|
|
25
|
-
return
|
|
28
|
+
return toDateString(addDate(new Date(), 1));
|
|
26
29
|
}
|
|
27
30
|
/**
|
|
28
31
|
* 上周(7天前日期)
|
|
29
32
|
* @param {Date} date 日期参数,默认当前日期
|
|
30
|
-
* @returns {
|
|
33
|
+
* @returns {string} 返回日期字符串
|
|
31
34
|
*/
|
|
32
35
|
function lastWeek(date = new Date()) {
|
|
33
|
-
return
|
|
36
|
+
return toDateString(addDate(date, -7));
|
|
34
37
|
}
|
|
35
38
|
/**
|
|
36
39
|
* 下周(7天后日期)
|
|
37
40
|
* @param {Date} date 日期参数,默认当前日期
|
|
38
|
-
* @returns {
|
|
41
|
+
* @returns {string} 返回日期字符串
|
|
39
42
|
*/
|
|
40
43
|
function nextWeek(date = new Date()) {
|
|
41
|
-
return
|
|
44
|
+
return toDateString(addDate(date, 7));
|
|
42
45
|
}
|
|
43
46
|
/**
|
|
44
47
|
* 上个月(30天前日期)
|
|
45
48
|
* @param {Date} date 日期参数,默认当前日期
|
|
46
|
-
* @returns {
|
|
49
|
+
* @returns {string} 返回日期字符串
|
|
47
50
|
*/
|
|
48
51
|
function lastMonth(date = new Date()) {
|
|
49
|
-
|
|
52
|
+
const newDate = addMonth(date, -1);
|
|
53
|
+
// 处理跨月边界
|
|
54
|
+
if (newDate.getMonth() === date.getMonth()) {
|
|
55
|
+
newDate.setDate(0);
|
|
56
|
+
}
|
|
57
|
+
return toDateString(newDate);
|
|
50
58
|
}
|
|
51
59
|
/**
|
|
52
60
|
* 下个月(30天后日期)
|
|
53
61
|
* @param {Date} date 日期参数,默认当前日期
|
|
54
|
-
* @returns {
|
|
62
|
+
* @returns {string} 返回日期字符串
|
|
55
63
|
*/
|
|
56
64
|
function nextMonth(date = new Date()) {
|
|
57
|
-
|
|
65
|
+
const newDate = addMonth(date, 1);
|
|
66
|
+
// 处理跨月边界
|
|
67
|
+
if (newDate.getMonth() === date.getMonth()) {
|
|
68
|
+
newDate.setDate(0);
|
|
69
|
+
}
|
|
70
|
+
return toDateString(newDate);
|
|
58
71
|
}
|
|
59
72
|
/**
|
|
60
73
|
* 上一年(365天前日期)
|
|
61
74
|
* @param {Date} date 日期参数,默认当前日期
|
|
62
|
-
* @returns {
|
|
75
|
+
* @returns {string} 返回日期字符串
|
|
63
76
|
*/
|
|
64
77
|
function lastYear(date = new Date()) {
|
|
65
|
-
|
|
78
|
+
const newDate = addYear(date, -1);
|
|
79
|
+
// 处理跨年边界,闰年2月29日→平年2月28日
|
|
80
|
+
if (newDate.getMonth() !== date.getMonth() || newDate.getDate() !== date.getDate()) {
|
|
81
|
+
newDate.setDate(28);
|
|
82
|
+
}
|
|
83
|
+
return toDateString(newDate);
|
|
66
84
|
}
|
|
67
85
|
/**
|
|
68
86
|
* 下一年(365天后日期)
|
|
69
87
|
* @param {Date} date 日期参数,默认当前日期
|
|
70
|
-
* @returns {
|
|
88
|
+
* @returns {string} 返回日期字符串
|
|
71
89
|
*/
|
|
72
90
|
function nextYear(date = new Date()) {
|
|
73
|
-
|
|
91
|
+
const newDate = addYear(date, 1);
|
|
92
|
+
// 处理跨年边界,闰年2月29日→平年2月28日
|
|
93
|
+
if (newDate.getMonth() !== date.getMonth() || newDate.getDate() !== date.getDate()) {
|
|
94
|
+
newDate.setDate(28);
|
|
95
|
+
}
|
|
96
|
+
return toDateString(newDate);
|
|
74
97
|
}
|
|
75
98
|
/* 判断当前日期 */
|
|
76
99
|
/**
|
|
77
100
|
* 是否为上午
|
|
78
101
|
* @param {Date} date 日期参数,默认当前日期
|
|
79
|
-
* @returns {
|
|
102
|
+
* @returns {boolean} 返回结果
|
|
80
103
|
*/
|
|
81
104
|
function isAM(date = new Date()) {
|
|
82
105
|
return date.getHours() < 12;
|
|
@@ -84,7 +107,7 @@ function isAM(date = new Date()) {
|
|
|
84
107
|
/**
|
|
85
108
|
* 是否为下午
|
|
86
109
|
* @param {Date} date 日期参数,默认当前日期
|
|
87
|
-
* @returns {
|
|
110
|
+
* @returns {boolean} 返回结果
|
|
88
111
|
*/
|
|
89
112
|
function isPM(date = new Date()) {
|
|
90
113
|
return date.getHours() >= 12;
|
|
@@ -92,88 +115,88 @@ function isPM(date = new Date()) {
|
|
|
92
115
|
/**
|
|
93
116
|
* 是否为今天
|
|
94
117
|
* @param {Date} date 日期参数,默认当前日期
|
|
95
|
-
* @returns {
|
|
118
|
+
* @returns {boolean} 返回结果
|
|
96
119
|
*/
|
|
97
120
|
function isToday(date = new Date()) {
|
|
98
121
|
// 此刻日期
|
|
99
|
-
|
|
122
|
+
const nowDate = new Date();
|
|
100
123
|
// 判断日期
|
|
101
|
-
return ["getFullYear", "getMonth", "getDate"].every((
|
|
124
|
+
return ["getFullYear", "getMonth", "getDate"].every((item) => nowDate[item]() === date[item]());
|
|
102
125
|
}
|
|
103
126
|
/**
|
|
104
127
|
* 是否为昨天
|
|
105
128
|
* @param {Date} date 日期参数,默认当前日期
|
|
106
|
-
* @returns {
|
|
129
|
+
* @returns {boolean} 返回结果
|
|
107
130
|
*/
|
|
108
131
|
function isYesterday(date = new Date()) {
|
|
109
132
|
// 计算时间差
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
133
|
+
const startTime = date.getTime();
|
|
134
|
+
const nowTime = Date.now();
|
|
135
|
+
const diffTime = nowTime - startTime;
|
|
136
|
+
const diffDay = parseInt(diffTime / (1000 * 60 * 60 * 24));
|
|
114
137
|
return diffDay === 1;
|
|
115
138
|
}
|
|
116
139
|
/**
|
|
117
140
|
* 是否为前天
|
|
118
141
|
* @param {Date} date 日期参数,默认当前日期
|
|
119
|
-
* @returns {
|
|
142
|
+
* @returns {boolean} 返回结果
|
|
120
143
|
*/
|
|
121
144
|
function isBeforeYesterday(date = new Date()) {
|
|
122
145
|
// 计算时间差
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
146
|
+
const startTime = date.getTime();
|
|
147
|
+
const nowTime = Date.now();
|
|
148
|
+
const diffTime = nowTime - startTime;
|
|
149
|
+
const diffDay = parseInt(diffTime / (1000 * 60 * 60 * 24));
|
|
127
150
|
return diffDay === 2;
|
|
128
151
|
}
|
|
129
152
|
/**
|
|
130
153
|
* 是否为明天
|
|
131
154
|
* @param {Date} date 日期参数,默认当前日期
|
|
132
|
-
* @returns {
|
|
155
|
+
* @returns {boolean} 返回结果
|
|
133
156
|
*/
|
|
134
157
|
function isTomorrow(date = new Date()) {
|
|
135
158
|
// 计算时间差
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
159
|
+
const startTime = date.getTime();
|
|
160
|
+
const nowTime = Date.now();
|
|
161
|
+
const diffTime = startTime - nowTime;
|
|
162
|
+
const diffDay = parseInt(diffTime / (1000 * 60 * 60 * 24));
|
|
140
163
|
return diffDay === 1;
|
|
141
164
|
}
|
|
142
165
|
/**
|
|
143
166
|
* 是否为后天
|
|
144
167
|
* @param {Date} date 日期参数,默认当前日期
|
|
145
|
-
* @returns {
|
|
168
|
+
* @returns {boolean} 返回结果
|
|
146
169
|
*/
|
|
147
170
|
function isAfterTomorrow(date = new Date()) {
|
|
148
171
|
// 计算时间差
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
172
|
+
const startTime = date.getTime();
|
|
173
|
+
const nowTime = Date.now();
|
|
174
|
+
const time = startTime - nowTime;
|
|
175
|
+
const diffDay = parseInt(time / (1000 * 60 * 60 * 24));
|
|
153
176
|
return diffDay === 2;
|
|
154
177
|
}
|
|
155
178
|
/**
|
|
156
179
|
* 是否为工作日
|
|
157
180
|
* @param {Date} date 日期参数,默认当前日期
|
|
158
|
-
* @returns {
|
|
181
|
+
* @returns {boolean} 返回结果
|
|
159
182
|
*/
|
|
160
183
|
function isWorkday(date = new Date()) {
|
|
161
|
-
|
|
184
|
+
const dayOfWeek = getDayOfWeek(date);
|
|
162
185
|
return dayOfWeek !== 6 && dayOfWeek !== 7;
|
|
163
186
|
}
|
|
164
187
|
/**
|
|
165
188
|
* 是否为周末(周六和周日)
|
|
166
189
|
* @param {Date} date 日期参数,默认当前日期
|
|
167
|
-
* @returns {
|
|
190
|
+
* @returns {boolean} 返回结果
|
|
168
191
|
*/
|
|
169
192
|
function isWeekend(date = new Date()) {
|
|
170
|
-
|
|
193
|
+
const dayOfWeek = getDayOfWeek(date);
|
|
171
194
|
return dayOfWeek === 6 || dayOfWeek === 7;
|
|
172
195
|
}
|
|
173
196
|
/**
|
|
174
197
|
* 是否为本周第一天
|
|
175
198
|
* @param {Date} date 日期参数,默认当前日期
|
|
176
|
-
* @returns {
|
|
199
|
+
* @returns {boolean} 返回结果
|
|
177
200
|
*/
|
|
178
201
|
function isFirstDayOfWeek(date = new Date()) {
|
|
179
202
|
return getDayOfWeek(date) === 1;
|
|
@@ -181,7 +204,7 @@ function isFirstDayOfWeek(date = new Date()) {
|
|
|
181
204
|
/**
|
|
182
205
|
* 是否为本周最后一天
|
|
183
206
|
* @param {Date} date 日期参数,默认当前日期
|
|
184
|
-
* @returns {
|
|
207
|
+
* @returns {boolean} 返回结果
|
|
185
208
|
*/
|
|
186
209
|
function isLastDayOfWeek(date = new Date()) {
|
|
187
210
|
return getDayOfWeek(date) === 7;
|
|
@@ -189,7 +212,7 @@ function isLastDayOfWeek(date = new Date()) {
|
|
|
189
212
|
/**
|
|
190
213
|
* 是否为本月第一天
|
|
191
214
|
* @param {Date} date 日期参数,默认当前日期
|
|
192
|
-
* @returns {
|
|
215
|
+
* @returns {boolean} 返回结果
|
|
193
216
|
*/
|
|
194
217
|
function isFirstDayOfMonth(date = new Date()) {
|
|
195
218
|
return getDayOfMonth(date) === 1;
|
|
@@ -197,7 +220,7 @@ function isFirstDayOfMonth(date = new Date()) {
|
|
|
197
220
|
/**
|
|
198
221
|
* 是否为本月最后一天
|
|
199
222
|
* @param {Date} date 日期参数,默认当前日期
|
|
200
|
-
* @returns {
|
|
223
|
+
* @returns {boolean} 返回结果
|
|
201
224
|
*/
|
|
202
225
|
function isLastDayOfMonth(date = new Date()) {
|
|
203
226
|
return getDayOfMonth(date) === getDaysOfMonth(date);
|
|
@@ -205,7 +228,7 @@ function isLastDayOfMonth(date = new Date()) {
|
|
|
205
228
|
/**
|
|
206
229
|
* 是否为本年第一天
|
|
207
230
|
* @param {Date} date 日期参数,默认当前日期
|
|
208
|
-
* @returns {
|
|
231
|
+
* @returns {boolean} 返回结果
|
|
209
232
|
*/
|
|
210
233
|
function isFirstDayOfYear(date = new Date()) {
|
|
211
234
|
return getDayOfYear(date) === 1;
|
|
@@ -213,7 +236,7 @@ function isFirstDayOfYear(date = new Date()) {
|
|
|
213
236
|
/**
|
|
214
237
|
* 是否为本年最后一天
|
|
215
238
|
* @param {Date} date 日期参数,默认当前日期
|
|
216
|
-
* @returns {
|
|
239
|
+
* @returns {boolean} 返回结果
|
|
217
240
|
*/
|
|
218
241
|
function isLastDayOfYear(date = new Date()) {
|
|
219
242
|
return getDayOfYear(date) === getDaysOfYear(date);
|
|
@@ -223,17 +246,17 @@ function isLastDayOfYear(date = new Date()) {
|
|
|
223
246
|
* 是否为闰年
|
|
224
247
|
* @description 闰年366天,平年365天
|
|
225
248
|
* @param {Date} date 日期参数,默认当前日期
|
|
226
|
-
* @returns {
|
|
249
|
+
* @returns {boolean} 返回结果
|
|
227
250
|
*/
|
|
228
251
|
function isLeapYear(date = new Date()) {
|
|
229
|
-
|
|
252
|
+
const year = date.getFullYear();
|
|
230
253
|
return (year % 100 !== 0 && year % 4 === 0) || year % 400 === 0;
|
|
231
254
|
}
|
|
232
255
|
/**
|
|
233
256
|
* 是否为平年
|
|
234
257
|
* @description 闰年366天,平年365天
|
|
235
258
|
* @param {Date} date 日期参数,默认当前日期
|
|
236
|
-
* @returns {
|
|
259
|
+
* @returns {boolean} 返回结果
|
|
237
260
|
*/
|
|
238
261
|
function isCommonYear(date = new Date()) {
|
|
239
262
|
return !isLeapYear(date);
|
|
@@ -243,26 +266,26 @@ function isCommonYear(date = new Date()) {
|
|
|
243
266
|
* 是否在日期之前
|
|
244
267
|
* @param {Date} startDate 开始日期
|
|
245
268
|
* @param {Date} endDate 结束日期,默认当前日期
|
|
246
|
-
* @returns {
|
|
269
|
+
* @returns {boolean} 返回结果
|
|
247
270
|
*/
|
|
248
271
|
function isBefore(startDate, endDate = new Date()) {
|
|
249
272
|
// 计算时间差
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
273
|
+
const startTime = startDate.getTime();
|
|
274
|
+
const endTime = endDate.getTime();
|
|
275
|
+
const diffTime = startTime - endTime;
|
|
253
276
|
return diffTime < 0;
|
|
254
277
|
}
|
|
255
278
|
/**
|
|
256
279
|
* 是否在日期之后
|
|
257
280
|
* @param {Date} startDate 开始日期
|
|
258
281
|
* @param {Date} endDate 结束日期,默认当前日期
|
|
259
|
-
* @returns {
|
|
282
|
+
* @returns {boolean} 返回结果
|
|
260
283
|
*/
|
|
261
284
|
function isAfter(startDate, endDate = new Date()) {
|
|
262
285
|
// 计算时间差
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
286
|
+
const startTime = startDate.getTime();
|
|
287
|
+
const endTime = endDate.getTime();
|
|
288
|
+
const diffTime = startTime - endTime;
|
|
266
289
|
return diffTime > 0;
|
|
267
290
|
}
|
|
268
291
|
/**
|
|
@@ -270,12 +293,12 @@ function isAfter(startDate, endDate = new Date()) {
|
|
|
270
293
|
* @param {Date} date 要比较的日期
|
|
271
294
|
* @param {Date} startDate 开始日期
|
|
272
295
|
* @param {Date} endDate 结束日期
|
|
273
|
-
* @returns {
|
|
296
|
+
* @returns {boolean} 返回结果
|
|
274
297
|
*/
|
|
275
298
|
function isBetween(date, startDate, endDate) {
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
299
|
+
const time = date.getTime();
|
|
300
|
+
const startTime = startDate.getTime();
|
|
301
|
+
const endTime = endDate.getTime();
|
|
279
302
|
return time > startTime && time < endTime;
|
|
280
303
|
}
|
|
281
304
|
/* 日期是否相同 */
|
|
@@ -283,46 +306,46 @@ function isBetween(date, startDate, endDate) {
|
|
|
283
306
|
* 两个日期是否为同一天
|
|
284
307
|
* @param {Date} startDate 开始日期
|
|
285
308
|
* @param {Date} endDate 结束日期
|
|
286
|
-
* @returns {
|
|
309
|
+
* @returns {boolean} 返回结果
|
|
287
310
|
*/
|
|
288
311
|
function isSame(startDate, endDate) {
|
|
289
|
-
return ["getFullYear", "getMonth", "getDate"].every((
|
|
312
|
+
return ["getFullYear", "getMonth", "getDate"].every((item) => startDate[item]() === endDate[item]());
|
|
290
313
|
}
|
|
291
314
|
/**
|
|
292
315
|
* 两个日期是否为同一周
|
|
293
316
|
* @param {Date} startDate 开始日期
|
|
294
317
|
* @param {Date} endDate 结束日期
|
|
295
|
-
* @returns {
|
|
318
|
+
* @returns {boolean} 返回结果
|
|
296
319
|
*/
|
|
297
320
|
function isSameWeek(startDate, endDate) {
|
|
298
|
-
|
|
299
|
-
|
|
321
|
+
const diffDate1 = startDate.getTime() / (24 * 60 * 60 * 1000);
|
|
322
|
+
const diffDate2 = endDate.getTime() / (24 * 60 * 60 * 1000);
|
|
300
323
|
return parseInt((diffDate1 + 4) / 7) === parseInt((diffDate2 + 4) / 7);
|
|
301
324
|
}
|
|
302
325
|
/**
|
|
303
326
|
* 两个日期是否为同一个月
|
|
304
327
|
* @param {Date} startDate 开始日期
|
|
305
328
|
* @param {Date} endDate 结束日期
|
|
306
|
-
* @returns {
|
|
329
|
+
* @returns {boolean} 返回结果
|
|
307
330
|
*/
|
|
308
331
|
function isSameMonth(startDate, endDate) {
|
|
309
|
-
return ["getFullYear", "getMonth"].every((
|
|
332
|
+
return ["getFullYear", "getMonth"].every((item) => startDate[item]() === endDate[item]());
|
|
310
333
|
}
|
|
311
334
|
/**
|
|
312
335
|
* 两个日期是否为同一年
|
|
313
336
|
* @param {Date} startDate 开始日期
|
|
314
337
|
* @param {Date} endDate 结束日期
|
|
315
|
-
* @returns {
|
|
338
|
+
* @returns {boolean} 返回结果
|
|
316
339
|
*/
|
|
317
340
|
function isSameYear(startDate, endDate) {
|
|
318
|
-
return ["getFullYear"].every((
|
|
341
|
+
return ["getFullYear"].every((item) => startDate[item]() === endDate[item]());
|
|
319
342
|
}
|
|
320
343
|
/* 比较两个日期相同 或 之前/之后 */
|
|
321
344
|
/**
|
|
322
345
|
* 两个日期是否相同或之前
|
|
323
346
|
* @param {Date} startDate 开始日期
|
|
324
347
|
* @param {Date} endDate 结束日期
|
|
325
|
-
* @returns {
|
|
348
|
+
* @returns {boolean} 返回结果
|
|
326
349
|
*/
|
|
327
350
|
function isSameOrBefore(startDate, endDate) {
|
|
328
351
|
return isSame(startDate, endDate) || isBefore(startDate, endDate);
|
|
@@ -331,7 +354,7 @@ function isSameOrBefore(startDate, endDate) {
|
|
|
331
354
|
* 两个日期是否相同或之后
|
|
332
355
|
* @param {Date} startDate 开始日期
|
|
333
356
|
* @param {Date} endDate 结束日期
|
|
334
|
-
* @returns {
|
|
357
|
+
* @returns {boolean} 返回结果
|
|
335
358
|
*/
|
|
336
359
|
function isSameOrAfter(startDate, endDate) {
|
|
337
360
|
return isSame(startDate, endDate) || isAfter(startDate, endDate);
|
|
@@ -347,25 +370,27 @@ function getNow() {
|
|
|
347
370
|
/**
|
|
348
371
|
* 获得当前日期字符串
|
|
349
372
|
* @param {Date} date 日期参数,默认当前日期
|
|
350
|
-
* @param
|
|
351
|
-
* @returns {
|
|
373
|
+
* @param options 配置项 配置项
|
|
374
|
+
* @returns {string} 返回日期字符串
|
|
352
375
|
*/
|
|
353
|
-
function getDate(date = new Date(),
|
|
354
|
-
|
|
376
|
+
function getDate(date = new Date(), options = { format: "yyyy-MM-dd" }) {
|
|
377
|
+
const { format } = options;
|
|
378
|
+
return toDateString(date, { format });
|
|
355
379
|
}
|
|
356
380
|
/**
|
|
357
381
|
* 获得当前日期时间字符串
|
|
358
382
|
* @param {Date} date 日期参数,默认当前日期
|
|
359
|
-
* @param
|
|
360
|
-
* @returns {
|
|
383
|
+
* @param options 配置项 配置项
|
|
384
|
+
* @returns {string} 返回日期时间字符串
|
|
361
385
|
*/
|
|
362
|
-
function getDateTime(date = new Date(),
|
|
363
|
-
|
|
386
|
+
function getDateTime(date = new Date(), options = { format: "yyyy-MM-dd HH:mm:ss" }) {
|
|
387
|
+
const { format } = options;
|
|
388
|
+
return toDateString(date, { format });
|
|
364
389
|
}
|
|
365
390
|
/**
|
|
366
391
|
* 获取当前时间戳
|
|
367
392
|
* @param {Date} date 日期参数,默认当前日期
|
|
368
|
-
* @returns {
|
|
393
|
+
* @returns {number} 返回时间戳
|
|
369
394
|
*/
|
|
370
395
|
function getTimestamp(date = new Date()) {
|
|
371
396
|
return date.getTime();
|
|
@@ -373,10 +398,10 @@ function getTimestamp(date = new Date()) {
|
|
|
373
398
|
/**
|
|
374
399
|
* 获取当前Unix时间戳
|
|
375
400
|
* @param {Date} date 日期参数,默认当前日期
|
|
376
|
-
* @returns {
|
|
401
|
+
* @returns {number} 返回Unix时间戳
|
|
377
402
|
*/
|
|
378
403
|
function getUnixTimestamp(date = new Date()) {
|
|
379
|
-
return Math.round(date / 1000);
|
|
404
|
+
return Math.round(date.getTime() / 1000);
|
|
380
405
|
}
|
|
381
406
|
/**
|
|
382
407
|
* 获得当前日期的对象形式
|
|
@@ -405,11 +430,11 @@ function getDateArray(date = new Date()) {
|
|
|
405
430
|
/**
|
|
406
431
|
* 获得当前日期是周几
|
|
407
432
|
* @param {Date} date 日期参数,默认当前日期
|
|
408
|
-
* @param
|
|
409
|
-
* @
|
|
410
|
-
* @returns {Number,String} 返回周几,会根据语言返回
|
|
433
|
+
* @param options 配置项
|
|
434
|
+
* @returns {number|string} 返回周几,会根据语言返回
|
|
411
435
|
*/
|
|
412
|
-
function getWeek(date = new Date(),
|
|
436
|
+
function getWeek(date = new Date(), options = { format: "E", lang: "zh" }) {
|
|
437
|
+
const { format, lang = "zh" } = options;
|
|
413
438
|
// 根据格式化和语言返回对应的周
|
|
414
439
|
if (format === "E") {
|
|
415
440
|
return DATE.WEEK[lang].MINI[date.getDay()];
|
|
@@ -427,13 +452,13 @@ function getWeek(date = new Date(), format = "E", lang = "zh") {
|
|
|
427
452
|
/**
|
|
428
453
|
* 获得当前日期是第几季度
|
|
429
454
|
* @param {Date} date 日期参数,默认当前日期
|
|
430
|
-
* @param
|
|
431
|
-
* @
|
|
432
|
-
* @returns {Number,String} 返回第几季度,会根据语言返回
|
|
455
|
+
* @param options 配置项
|
|
456
|
+
* @returns {number|string} 返回第几季度,会根据语言返回
|
|
433
457
|
*/
|
|
434
|
-
function getQuarter(date = new Date(),
|
|
458
|
+
function getQuarter(date = new Date(), options = { format: "Q", lang: "zh" }) {
|
|
459
|
+
const { format, lang = "zh" } = options;
|
|
435
460
|
// 根据格式化和语言返回对应的周
|
|
436
|
-
|
|
461
|
+
const quarterNum = Number(Math.floor((date.getMonth() + 3) / 3));
|
|
437
462
|
if (format === "Q") {
|
|
438
463
|
return DATE.QUARTER[lang].MINI[quarterNum - 1];
|
|
439
464
|
}
|
|
@@ -451,7 +476,7 @@ function getQuarter(date = new Date(), format = "Q", lang = "zh") {
|
|
|
451
476
|
/**
|
|
452
477
|
* 获得当前日期是所在周的第几天
|
|
453
478
|
* @param {Date} date 日期参数,默认当前日期
|
|
454
|
-
* @returns {
|
|
479
|
+
* @returns {number|string} 返回天数
|
|
455
480
|
*/
|
|
456
481
|
function getDayOfWeek(date = new Date()) {
|
|
457
482
|
return [7, 1, 2, 3, 4, 5, 6][date.getDay()];
|
|
@@ -459,7 +484,7 @@ function getDayOfWeek(date = new Date()) {
|
|
|
459
484
|
/**
|
|
460
485
|
* 获得当前日期是所在月的第几天
|
|
461
486
|
* @param {Date} date 日期参数,默认当前日期
|
|
462
|
-
* @returns {
|
|
487
|
+
* @returns {number} 返回天数
|
|
463
488
|
*/
|
|
464
489
|
function getDayOfMonth(date = new Date()) {
|
|
465
490
|
return date.getDate();
|
|
@@ -467,44 +492,43 @@ function getDayOfMonth(date = new Date()) {
|
|
|
467
492
|
/**
|
|
468
493
|
* 获得当前日期是所在年的第几天
|
|
469
494
|
* @param {Date} date 日期参数,默认当前日期
|
|
470
|
-
* @returns {
|
|
495
|
+
* @returns {number} 返回天数
|
|
471
496
|
*/
|
|
472
497
|
function getDayOfYear(date = new Date()) {
|
|
473
|
-
return Math.ceil((date - new Date(date.getFullYear().toString())) / (24 * 60 * 60 * 1000)) + 1;
|
|
498
|
+
return Math.ceil((date.getTime() - new Date(date.getFullYear().toString()).getTime()) / (24 * 60 * 60 * 1000)) + 1;
|
|
474
499
|
}
|
|
475
500
|
/* 当前日期的周是所在 月/年 的第几周 */
|
|
476
501
|
/**
|
|
477
502
|
* 获得当前日期是所在月的第几周
|
|
478
503
|
* @param {Date} date 日期参数,默认当前日期
|
|
479
|
-
* @returns {
|
|
504
|
+
* @returns {number} 返回周数
|
|
480
505
|
*/
|
|
481
506
|
function getWeekOfMonth(date = new Date()) {
|
|
482
|
-
return Math.ceil((date.getDate() + 6 - getDayOfWeek(date)) / 7);
|
|
507
|
+
return Math.ceil((date.getDate() + 6 - Number(getDayOfWeek(date))) / 7);
|
|
483
508
|
}
|
|
484
509
|
/**
|
|
485
510
|
* 获得当前日期是所在年的第几周
|
|
486
511
|
* @param {Date} date 日期参数,默认当前日期
|
|
487
|
-
* @returns {
|
|
512
|
+
* @returns {number} 返回周数
|
|
488
513
|
*/
|
|
489
514
|
function getWeekOfYear(date = new Date()) {
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
return Math.ceil((diff + startDay) / 7);
|
|
515
|
+
const startDate = new Date(date.getFullYear(), 0, 1);
|
|
516
|
+
const startDay = getDayOfWeek(startDate);
|
|
517
|
+
const diff = Math.round((date.getTime() - startDate.getTime()) / (24 * 60 * 60 * 1000));
|
|
518
|
+
return Math.ceil((diff + Number(startDay)) / 7);
|
|
494
519
|
}
|
|
495
520
|
/* 当前日期所在 周/月/年 共几天 */
|
|
496
521
|
/**
|
|
497
522
|
* 获得当前日期所在的周共几天
|
|
498
|
-
* @
|
|
499
|
-
* @returns {Number} 返回天数
|
|
523
|
+
* @returns {number} 返回天数
|
|
500
524
|
*/
|
|
501
|
-
function getDaysOfWeek(
|
|
525
|
+
function getDaysOfWeek() {
|
|
502
526
|
return 7;
|
|
503
527
|
}
|
|
504
528
|
/**
|
|
505
529
|
* 获得当前日期所在的月共几天
|
|
506
530
|
* @param {Date} date 日期参数,默认当前日期
|
|
507
|
-
* @returns {
|
|
531
|
+
* @returns {number} 返回天数
|
|
508
532
|
*/
|
|
509
533
|
function getDaysOfMonth(date = new Date()) {
|
|
510
534
|
return new Date(date.getFullYear(), date.getMonth() + 1, 0).getDate();
|
|
@@ -512,7 +536,7 @@ function getDaysOfMonth(date = new Date()) {
|
|
|
512
536
|
/**
|
|
513
537
|
* 获得当前日期所在的年共几天
|
|
514
538
|
* @param {Date} date 日期参数,默认当前日期
|
|
515
|
-
* @returns {
|
|
539
|
+
* @returns {number} 返回天数
|
|
516
540
|
*/
|
|
517
541
|
function getDaysOfYear(date = new Date()) {
|
|
518
542
|
return isLeapYear(date) ? 366 : 365;
|
|
@@ -521,12 +545,12 @@ function getDaysOfYear(date = new Date()) {
|
|
|
521
545
|
/**
|
|
522
546
|
* 获得当前日期是所在月的第几周
|
|
523
547
|
* @param {Date} date 日期参数,默认当前日期
|
|
524
|
-
* @returns {
|
|
548
|
+
* @returns {number} 返回周数
|
|
525
549
|
*/
|
|
526
550
|
function getWeeksOfMonth(date = new Date()) {
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
551
|
+
const startDate = new Date(date.getFullYear(), 0, 1);
|
|
552
|
+
const startDay = Number(getDayOfWeek(startDate));
|
|
553
|
+
const fullDays = isLeapYear(date) ? 366 : 365;
|
|
530
554
|
if (startDay === 1) {
|
|
531
555
|
return Math.ceil(fullDays / 7);
|
|
532
556
|
}
|
|
@@ -537,12 +561,12 @@ function getWeeksOfMonth(date = new Date()) {
|
|
|
537
561
|
/**
|
|
538
562
|
* 获得当前日期是所在年的第几周
|
|
539
563
|
* @param {Date} date 日期参数,默认当前日期
|
|
540
|
-
* @returns {
|
|
564
|
+
* @returns {number} 返回周数
|
|
541
565
|
*/
|
|
542
566
|
function getWeeksOfYear(date = new Date()) {
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
567
|
+
const startDate = new Date(date.getFullYear(), 0, 1);
|
|
568
|
+
const startDay = Number(getDayOfWeek(startDate));
|
|
569
|
+
const fullDays = isLeapYear(date) ? 366 : 365;
|
|
546
570
|
if (startDay === 1) {
|
|
547
571
|
return Math.ceil(fullDays / 7);
|
|
548
572
|
}
|
|
@@ -554,101 +578,111 @@ function getWeeksOfYear(date = new Date()) {
|
|
|
554
578
|
/**
|
|
555
579
|
* 获得当前日期所在周的第一天
|
|
556
580
|
* @param {Date} date 日期参数,默认当前日期
|
|
557
|
-
* @returns {
|
|
581
|
+
* @returns {string} 返回日期字符串
|
|
558
582
|
*/
|
|
559
583
|
function getFirstDateOfWeek(date = new Date()) {
|
|
560
|
-
|
|
584
|
+
const weekDay = Number(getDayOfWeek(date));
|
|
561
585
|
date.setDate(date.getDate() - weekDay + 1);
|
|
562
|
-
return
|
|
586
|
+
return toDateString(date);
|
|
563
587
|
}
|
|
564
588
|
/**
|
|
565
589
|
* 获得当前日期所在周的最后一天
|
|
566
590
|
* @param {Date} date 日期参数,默认当前日期
|
|
567
|
-
* @returns {
|
|
591
|
+
* @returns {string} 返回日期字符串
|
|
568
592
|
*/
|
|
569
593
|
function getLastDateOfWeek(date = new Date()) {
|
|
570
|
-
|
|
594
|
+
const weekDay = Number(getDayOfWeek(date));
|
|
571
595
|
date.setDate(date.getDate() + (7 - weekDay));
|
|
572
|
-
return
|
|
596
|
+
return toDateString(date);
|
|
573
597
|
}
|
|
574
598
|
/**
|
|
575
599
|
* 获取当前日期所在周的所有日期
|
|
600
|
+
* @param {Date} date 日期参数,默认当前日期
|
|
601
|
+
* @returns {string[]} 返回日期数组
|
|
576
602
|
*/
|
|
577
603
|
function getFullDateOfWeek(date = new Date()) {
|
|
578
|
-
|
|
604
|
+
const array = [];
|
|
579
605
|
// 获得当前日期是本周几
|
|
580
|
-
|
|
606
|
+
const dayOfWeek = date.getDay();
|
|
581
607
|
// 根据当前日期获取本周一
|
|
582
|
-
|
|
608
|
+
const firstDateOfWeek = new Date();
|
|
583
609
|
firstDateOfWeek.setDate(date.getDate() - (dayOfWeek === 0 ? 6 : dayOfWeek - 1));
|
|
584
610
|
// 遍历本周日期
|
|
585
611
|
for (let i = 0; i < 7; i++) {
|
|
586
|
-
|
|
612
|
+
const currentDate = new Date(firstDateOfWeek);
|
|
587
613
|
currentDate.setDate(currentDate.getDate() + i);
|
|
588
|
-
array.push(
|
|
614
|
+
array.push(toDateString(currentDate));
|
|
589
615
|
}
|
|
590
616
|
return array;
|
|
591
617
|
}
|
|
592
618
|
/**
|
|
593
619
|
* 获得当前日期所在月的第一天
|
|
594
620
|
* @param {Date} date 日期参数,默认当前日期
|
|
595
|
-
* @returns {
|
|
621
|
+
* @returns {string} 返回日期字符串
|
|
596
622
|
*/
|
|
597
623
|
function getFirstDateOfMonth(date = new Date()) {
|
|
598
624
|
date.setDate(1);
|
|
599
|
-
return
|
|
625
|
+
return toDateString(date);
|
|
600
626
|
}
|
|
601
627
|
/**
|
|
602
628
|
* 获得当前日期所在月的最后一天
|
|
603
629
|
* @param {Date} date 日期参数,默认当前日期
|
|
604
|
-
* @returns {
|
|
630
|
+
* @returns {string} 返回日期字符串
|
|
605
631
|
*/
|
|
606
632
|
function getLastDateOfMonth(date = new Date()) {
|
|
607
|
-
return
|
|
633
|
+
return toDateString(new Date(date.getFullYear(), date.getMonth() + 1, 0));
|
|
608
634
|
}
|
|
609
635
|
/**
|
|
610
636
|
* 获取当前日期所在月的所有日期
|
|
637
|
+
* @param {Date} date 日期参数,默认当前日期
|
|
638
|
+
* @returns {string[]} 返回日期数组
|
|
611
639
|
*/
|
|
612
640
|
function getFullDateOfMonth(date = new Date()) {
|
|
613
|
-
|
|
641
|
+
const array = [];
|
|
614
642
|
// 获得本月第一天
|
|
615
|
-
|
|
643
|
+
const firstDateOfMonth = new Date(date.getFullYear(), date.getMonth(), 1);
|
|
616
644
|
// 获得本月最后一天
|
|
617
|
-
|
|
645
|
+
const lastDateOfMonth = new Date(date.getFullYear(), date.getMonth() + 1, 0);
|
|
618
646
|
// 遍历本月日期
|
|
619
647
|
for (let i = 0; i < lastDateOfMonth.getDate(); i++) {
|
|
620
|
-
|
|
648
|
+
const currentDate = new Date(firstDateOfMonth);
|
|
621
649
|
currentDate.setDate(firstDateOfMonth.getDate() + i);
|
|
622
|
-
array.push(currentDate);
|
|
650
|
+
array.push(toDateString(currentDate));
|
|
623
651
|
}
|
|
624
652
|
return array;
|
|
625
653
|
}
|
|
626
654
|
/**
|
|
627
655
|
* 获取当前日期所在年的第一天
|
|
656
|
+
* @param {Date} date 日期参数,默认当前日期
|
|
657
|
+
* @returns {string} 返回日期字符串
|
|
628
658
|
*/
|
|
629
659
|
function getFirstDateOfYear(date = new Date()) {
|
|
630
|
-
return new Date(date.getFullYear(), 0, 1);
|
|
660
|
+
return toDateString(new Date(date.getFullYear(), 0, 1));
|
|
631
661
|
}
|
|
632
662
|
/**
|
|
633
663
|
* 获取当前日期所在年的最后一天
|
|
664
|
+
* @param {Date} date 日期参数,默认当前日期
|
|
665
|
+
* @returns {string} 返回日期字符串
|
|
634
666
|
*/
|
|
635
667
|
function getLastDateOfYear(date = new Date()) {
|
|
636
|
-
return new Date(date.getFullYear(), 11, 31);
|
|
668
|
+
return toDateString(new Date(date.getFullYear(), 11, 31));
|
|
637
669
|
}
|
|
638
670
|
/**
|
|
639
671
|
* 获取当前日期所在年的所有日期
|
|
672
|
+
* @param {Date} date 日期参数,默认当前日期
|
|
673
|
+
* @returns {string} 返回日期字符串
|
|
640
674
|
*/
|
|
641
675
|
function getFullDateOfYear(date = new Date()) {
|
|
642
|
-
|
|
676
|
+
const array = [];
|
|
643
677
|
// 获得本年第一天
|
|
644
|
-
|
|
678
|
+
const firstDateOfYear = new Date(date.getFullYear(), 0, 1);
|
|
645
679
|
// 获得本年一共多少天
|
|
646
|
-
|
|
680
|
+
const daysOfYear = getDaysOfYear();
|
|
647
681
|
// 遍历本年日期
|
|
648
682
|
for (let i = 0; i < daysOfYear; i++) {
|
|
649
|
-
|
|
683
|
+
const currentDate = new Date(firstDateOfYear);
|
|
650
684
|
currentDate.setDate(firstDateOfYear.getDate() + i);
|
|
651
|
-
array.push(currentDate
|
|
685
|
+
array.push(toDateString(currentDate));
|
|
652
686
|
}
|
|
653
687
|
return array;
|
|
654
688
|
}
|
|
@@ -657,12 +691,12 @@ function getFullDateOfYear(date = new Date()) {
|
|
|
657
691
|
* 计算两个日期相差的天数,不满一天为0
|
|
658
692
|
* @param {Date} startDate 开始日期
|
|
659
693
|
* @param {Date} endDate 结束日期
|
|
660
|
-
* @returns {
|
|
694
|
+
* @returns {number} 返回两个日期相差的天数,结果为正数或者负数
|
|
661
695
|
*/
|
|
662
696
|
function getDiffDay(startDate, endDate) {
|
|
663
697
|
if (isNull(startDate) || isNull(endDate))
|
|
664
698
|
return 0;
|
|
665
|
-
|
|
699
|
+
const diff = (endDate.getTime() - startDate.getTime()) / (24 * 60 * 60 * 1000);
|
|
666
700
|
// 返回
|
|
667
701
|
return diff >= 0 ? Math.abs(diff) : diff;
|
|
668
702
|
}
|
|
@@ -670,12 +704,12 @@ function getDiffDay(startDate, endDate) {
|
|
|
670
704
|
* 计算两个日期相差的周数,不满一周为0
|
|
671
705
|
* @param {Date} startDate 开始日期
|
|
672
706
|
* @param {Date} endDate 结束日期
|
|
673
|
-
* @returns {
|
|
707
|
+
* @returns {number} 返回两个日期相差的周数,结果为正数或者负数
|
|
674
708
|
*/
|
|
675
709
|
function getDiffWeek(startDate, endDate) {
|
|
676
710
|
if (isNull(startDate) || isNull(endDate))
|
|
677
711
|
return 0;
|
|
678
|
-
|
|
712
|
+
const diff = (endDate.getTime() - startDate.getTime()) / (7 * 24 * 60 * 60 * 1000);
|
|
679
713
|
// 返回
|
|
680
714
|
return diff >= 0 ? Math.abs(diff) : diff;
|
|
681
715
|
}
|
|
@@ -683,12 +717,12 @@ function getDiffWeek(startDate, endDate) {
|
|
|
683
717
|
* 计算两个日期相差的月数,不满一月为0
|
|
684
718
|
* @param {Date} startDate 开始日期
|
|
685
719
|
* @param {Date} endDate 结束日期
|
|
686
|
-
* @returns {
|
|
720
|
+
* @returns {number} 返回两个日期相差的月数,结果为正数或者负数
|
|
687
721
|
*/
|
|
688
722
|
function getDiffMonth(startDate, endDate) {
|
|
689
723
|
if (isNull(startDate) || isNull(endDate))
|
|
690
724
|
return 0;
|
|
691
|
-
|
|
725
|
+
const diff = (startDate.getTime() - endDate.getTime()) / (30 * 24 * 60 * 60 * 1000);
|
|
692
726
|
// 返回
|
|
693
727
|
return diff >= 0 ? Math.abs(diff) : diff;
|
|
694
728
|
}
|
|
@@ -696,12 +730,12 @@ function getDiffMonth(startDate, endDate) {
|
|
|
696
730
|
* 计算两个日期相差的年数,不满一年为0
|
|
697
731
|
* @param {Date} startDate 开始日期
|
|
698
732
|
* @param {Date} endDate 结束日期
|
|
699
|
-
* @returns {
|
|
733
|
+
* @returns {number} 返回两个日期相差的年数,结果为正数或者负数
|
|
700
734
|
*/
|
|
701
735
|
function getDiffYear(startDate, endDate) {
|
|
702
736
|
if (isNull(startDate) || isNull(endDate))
|
|
703
737
|
return 0;
|
|
704
|
-
|
|
738
|
+
const diff = (endDate.getTime() - startDate.getTime()) / (12 * 30 * 24 * 60 * 60 * 1000);
|
|
705
739
|
// 返回
|
|
706
740
|
return diff >= 0 ? Math.abs(diff) : diff;
|
|
707
741
|
}
|
|
@@ -716,9 +750,9 @@ function getBetweenDates(startDate, endDate) {
|
|
|
716
750
|
if (isNull(startDate) || isNull(endDate))
|
|
717
751
|
return [];
|
|
718
752
|
// 计算
|
|
719
|
-
|
|
720
|
-
while (endDate - startDate >= 0) {
|
|
721
|
-
|
|
753
|
+
const array = [];
|
|
754
|
+
while (endDate.getTime() - startDate.getTime() >= 0) {
|
|
755
|
+
const year = startDate.getFullYear(), month = _digit(startDate.getMonth() + 1), day = _digit(startDate.getDate());
|
|
722
756
|
// 加入数组
|
|
723
757
|
array.push(year + "-" + month + "-" + day);
|
|
724
758
|
// 更新日期
|
|
@@ -737,22 +771,22 @@ function getBetweenMonths(startDate, endDate) {
|
|
|
737
771
|
if (isNull(startDate) || isNull(endDate))
|
|
738
772
|
return [];
|
|
739
773
|
// 计算
|
|
740
|
-
|
|
774
|
+
const array = [];
|
|
741
775
|
// 获取时间对象
|
|
742
|
-
|
|
743
|
-
|
|
776
|
+
const min = new Date();
|
|
777
|
+
const max = new Date();
|
|
744
778
|
// 设置起始时间
|
|
745
779
|
min.setFullYear(startDate.getFullYear(), startDate.getMonth() + 1);
|
|
746
780
|
// 设置结束时间
|
|
747
781
|
max.setFullYear(endDate.getFullYear(), endDate.getMonth() + 1);
|
|
748
782
|
// 复制一份起始时间对象
|
|
749
|
-
|
|
783
|
+
const curr = min;
|
|
750
784
|
// 定义字符串
|
|
751
785
|
let str = "";
|
|
752
786
|
// 起始时间在结束时间之前
|
|
753
787
|
while (curr <= max) {
|
|
754
788
|
// 获取此时间的月份
|
|
755
|
-
|
|
789
|
+
const month = curr.getMonth();
|
|
756
790
|
// 如果月份为0,也就是代表12月份
|
|
757
791
|
if (month === 0) {
|
|
758
792
|
str = curr.getFullYear() - 1 + "-" + 12;
|
|
@@ -778,9 +812,9 @@ function getBetweenYears(startDate, endDate) {
|
|
|
778
812
|
if (isNull(startDate) || isNull(endDate))
|
|
779
813
|
return [];
|
|
780
814
|
// 计算
|
|
781
|
-
|
|
782
|
-
while (endDate - startDate >= 0) {
|
|
783
|
-
|
|
815
|
+
const array = [];
|
|
816
|
+
while (endDate.getTime() - startDate.getTime() >= 0) {
|
|
817
|
+
const year = startDate.getFullYear();
|
|
784
818
|
// 加入数组
|
|
785
819
|
array.push(year);
|
|
786
820
|
// 更新日期
|
|
@@ -793,22 +827,23 @@ function getBetweenYears(startDate, endDate) {
|
|
|
793
827
|
* 获得过去时间的字符串显示
|
|
794
828
|
* @description 例如:刚刚,1分钟前,1小时前等
|
|
795
829
|
* @param {Date} date 日期参数
|
|
796
|
-
* @param
|
|
797
|
-
* @returns {
|
|
830
|
+
* @param options 配置项
|
|
831
|
+
* @returns {string} 返回字符串
|
|
798
832
|
*/
|
|
799
|
-
function getPastTime(date,
|
|
833
|
+
function getPastTime(date, options = { lang: "zh" }) {
|
|
834
|
+
const { lang = "zh" } = options;
|
|
800
835
|
if (isNull(date))
|
|
801
836
|
return "--";
|
|
802
837
|
// 计算时间差
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
838
|
+
const startTime = date.getTime();
|
|
839
|
+
const currentTime = Date.now();
|
|
840
|
+
const time = currentTime - startTime;
|
|
806
841
|
// 年月日时分
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
|
|
842
|
+
const year = parseInt(time / (1000 * 60 * 60 * 24 * 30 * 12));
|
|
843
|
+
const month = parseInt(time / (1000 * 60 * 60 * 24 * 30));
|
|
844
|
+
const day = parseInt(time / (1000 * 60 * 60 * 24));
|
|
845
|
+
const hour = parseInt(time / (1000 * 60 * 60));
|
|
846
|
+
const min = parseInt(time / (1000 * 60));
|
|
812
847
|
// 返回结果
|
|
813
848
|
if (year) {
|
|
814
849
|
return year + DATE.PASS_TIME[lang].YEAR;
|
|
@@ -846,15 +881,16 @@ function getPastTime(date, lang = "zh") {
|
|
|
846
881
|
* 获得剩余时间的字符串显示
|
|
847
882
|
* @description 例如:1天10小时20分钟30秒
|
|
848
883
|
* @param {Date} date 日期参数
|
|
849
|
-
* @param
|
|
850
|
-
* @returns {
|
|
884
|
+
* @param options 配置项
|
|
885
|
+
* @returns {string} 返回字符串
|
|
851
886
|
*/
|
|
852
|
-
function getOverTime(date,
|
|
887
|
+
function getOverTime(date, options = { lang: "zh" }) {
|
|
888
|
+
const { lang = "zh" } = options;
|
|
853
889
|
if (isNull(date))
|
|
854
890
|
return "--";
|
|
855
891
|
// 计算
|
|
856
|
-
|
|
857
|
-
|
|
892
|
+
const startDate = new Date(); // 开始时间
|
|
893
|
+
const t = date.getTime() - startDate.getTime(); // 时间差
|
|
858
894
|
let d = 0, h = 0, m = 0, s = 0;
|
|
859
895
|
if (t >= 0) {
|
|
860
896
|
d = Math.floor(t / 1000 / 3600 / 24);
|
|
@@ -868,23 +904,23 @@ function getOverTime(date, lang = "zh") {
|
|
|
868
904
|
/**
|
|
869
905
|
* 通过日期获得年龄
|
|
870
906
|
* @param {Date} date 日期参数
|
|
871
|
-
* @returns {
|
|
907
|
+
* @returns {number} 返回周岁年龄
|
|
872
908
|
*/
|
|
873
909
|
function getAge(date) {
|
|
874
910
|
let age = 0;
|
|
875
911
|
// 传参日期
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
|
|
912
|
+
const dateArray = toDateString(date).split("-");
|
|
913
|
+
const birthYear = Number(dateArray[0]);
|
|
914
|
+
const birthMonth = Number(dateArray[1]);
|
|
915
|
+
const birthDay = Number(dateArray[2]);
|
|
880
916
|
// 当前的日期
|
|
881
|
-
|
|
882
|
-
|
|
917
|
+
const nowDate = new Date();
|
|
918
|
+
const nowYear = nowDate.getFullYear(), nowMonth = nowDate.getMonth() + 1, nowDay = nowDate.getDate();
|
|
883
919
|
// 出生年份需要小于当年,否则是0岁
|
|
884
|
-
|
|
920
|
+
const diffAge = nowYear - birthYear;
|
|
885
921
|
if (diffAge > 0) {
|
|
886
|
-
|
|
887
|
-
|
|
922
|
+
const diffMonth = nowMonth - birthMonth;
|
|
923
|
+
const diffDay = nowDay - birthDay;
|
|
888
924
|
if (diffMonth === 0) {
|
|
889
925
|
if (diffDay < 0) {
|
|
890
926
|
age = diffAge - 1;
|
|
@@ -908,29 +944,31 @@ function getAge(date) {
|
|
|
908
944
|
/**
|
|
909
945
|
* 通过日期获得星座
|
|
910
946
|
* @param {Date} date 日期参数
|
|
911
|
-
* @param
|
|
912
|
-
* @returns {
|
|
947
|
+
* @param options 配置项
|
|
948
|
+
* @returns {string} 返回星座
|
|
913
949
|
*/
|
|
914
|
-
function getZodiac(date,
|
|
950
|
+
function getZodiac(date, options = { lang: "zh" }) {
|
|
951
|
+
const { lang = "zh" } = options;
|
|
915
952
|
if (isNull(date))
|
|
916
953
|
return "";
|
|
917
954
|
// 计算
|
|
918
|
-
|
|
919
|
-
|
|
920
|
-
|
|
955
|
+
const days = [20, 19, 21, 20, 21, 22, 23, 23, 23, 24, 23, 22];
|
|
956
|
+
const month = date.getMonth() + 1;
|
|
957
|
+
const day = date.getDate();
|
|
921
958
|
return day < days[month - 1] ? DATE.ZODIAC[lang][month - 1] : DATE.ZODIAC[lang][month];
|
|
922
959
|
}
|
|
923
960
|
/**
|
|
924
961
|
* 通过日期获得生肖
|
|
925
962
|
* @param {Date} date 日期参数
|
|
926
|
-
* @param
|
|
927
|
-
* @returns {
|
|
963
|
+
* @param options 配置项
|
|
964
|
+
* @returns {string} 返回生肖
|
|
928
965
|
*/
|
|
929
|
-
function getChineseZodiac(date,
|
|
966
|
+
function getChineseZodiac(date, options = { lang: "zh" }) {
|
|
967
|
+
const { lang = "zh" } = options;
|
|
930
968
|
if (isNull(date))
|
|
931
969
|
return "";
|
|
932
970
|
// 计算
|
|
933
|
-
|
|
971
|
+
const year = date.getFullYear();
|
|
934
972
|
if (year < 1900) {
|
|
935
973
|
return "未知";
|
|
936
974
|
}
|
|
@@ -940,7 +978,7 @@ function getChineseZodiac(date, lang = "zh") {
|
|
|
940
978
|
/**
|
|
941
979
|
* 日期加减年
|
|
942
980
|
* @param {Date} date 日期参数,默认当前日期
|
|
943
|
-
* @param {
|
|
981
|
+
* @param {number} num 加减数量,用正数和负数表示;默认+1
|
|
944
982
|
* @returns {Date} 返回加减后的日期
|
|
945
983
|
*/
|
|
946
984
|
function addYear(date = new Date(), num = 1) {
|
|
@@ -950,7 +988,7 @@ function addYear(date = new Date(), num = 1) {
|
|
|
950
988
|
/**
|
|
951
989
|
* 日期加减月
|
|
952
990
|
* @param {Date} date 日期参数,默认当前日期
|
|
953
|
-
* @param {
|
|
991
|
+
* @param {number} num 加减数量,用正数和负数表示;默认+1
|
|
954
992
|
* @returns {Date} 返回加减后的日期
|
|
955
993
|
*/
|
|
956
994
|
function addMonth(date = new Date(), num = 1) {
|
|
@@ -960,7 +998,7 @@ function addMonth(date = new Date(), num = 1) {
|
|
|
960
998
|
/**
|
|
961
999
|
* 日期加减天
|
|
962
1000
|
* @param {Date} date 日期参数,默认当前日期
|
|
963
|
-
* @param {
|
|
1001
|
+
* @param {number} num 加减数量,用正数和负数表示;默认+1
|
|
964
1002
|
* @returns {Date} 返回加减后的日期
|
|
965
1003
|
*/
|
|
966
1004
|
function addDate(date = new Date(), num = 1) {
|
|
@@ -970,7 +1008,7 @@ function addDate(date = new Date(), num = 1) {
|
|
|
970
1008
|
/**
|
|
971
1009
|
* 日期加减小时
|
|
972
1010
|
* @param {Date} date 日期参数,默认当前日期
|
|
973
|
-
* @param {
|
|
1011
|
+
* @param {number} num 加减数量,用正数和负数表示;默认+1
|
|
974
1012
|
* @returns {Date} 返回加减后的日期
|
|
975
1013
|
*/
|
|
976
1014
|
function addHours(date = new Date(), num = 1) {
|
|
@@ -980,7 +1018,7 @@ function addHours(date = new Date(), num = 1) {
|
|
|
980
1018
|
/**
|
|
981
1019
|
* 日期加减分钟
|
|
982
1020
|
* @param {Date} date 日期参数,默认当前日期
|
|
983
|
-
* @param {
|
|
1021
|
+
* @param {number} num 加减数量,用正数和负数表示;默认+1
|
|
984
1022
|
* @returns {Date} 返回加减后的日期
|
|
985
1023
|
*/
|
|
986
1024
|
function addMinutes(date = new Date(), num = 1) {
|
|
@@ -990,7 +1028,7 @@ function addMinutes(date = new Date(), num = 1) {
|
|
|
990
1028
|
/**
|
|
991
1029
|
* 日期加减秒
|
|
992
1030
|
* @param {Date} date 日期参数,默认当前日期
|
|
993
|
-
* @param {
|
|
1031
|
+
* @param {number} num 加减数量,用正数和负数表示;默认+1
|
|
994
1032
|
* @returns {Date} 返回加减后的日期
|
|
995
1033
|
*/
|
|
996
1034
|
function addSeconds(date = new Date(), num = 1) {
|
|
@@ -1000,7 +1038,7 @@ function addSeconds(date = new Date(), num = 1) {
|
|
|
1000
1038
|
/**
|
|
1001
1039
|
* 日期加减毫秒
|
|
1002
1040
|
* @param {Date} date 日期参数,默认当前日期
|
|
1003
|
-
* @param {
|
|
1041
|
+
* @param {number} num 加减数量,用正数和负数表示;默认+100
|
|
1004
1042
|
* @returns {Date} 返回加减后的日期
|
|
1005
1043
|
*/
|
|
1006
1044
|
function addMillisecond(date = new Date(), num = 100) {
|
|
@@ -1010,7 +1048,7 @@ function addMillisecond(date = new Date(), num = 100) {
|
|
|
1010
1048
|
/**
|
|
1011
1049
|
* 日期加减周
|
|
1012
1050
|
* @param {Date} date 日期参数,默认当前日期
|
|
1013
|
-
* @param {
|
|
1051
|
+
* @param {number} num 加减数量,用正数和负数表示;默认+1
|
|
1014
1052
|
* @returns {Date} 返回加减后的日期
|
|
1015
1053
|
*/
|
|
1016
1054
|
function addWeek(date = new Date(), num = 1) {
|
|
@@ -1020,7 +1058,7 @@ function addWeek(date = new Date(), num = 1) {
|
|
|
1020
1058
|
/**
|
|
1021
1059
|
* 日期加减季度
|
|
1022
1060
|
* @param {Date} date 日期参数,默认当前日期
|
|
1023
|
-
* @param {
|
|
1061
|
+
* @param {number} num 加减数量,用正数和负数表示;默认+1
|
|
1024
1062
|
* @returns {Date} 返回加减后的日期
|
|
1025
1063
|
*/
|
|
1026
1064
|
function addQuarter(date = new Date(), num = 1) {
|
|
@@ -1029,151 +1067,190 @@ function addQuarter(date = new Date(), num = 1) {
|
|
|
1029
1067
|
}
|
|
1030
1068
|
/* 格式化和解析日期 */
|
|
1031
1069
|
/**
|
|
1032
|
-
*
|
|
1033
|
-
* @description
|
|
1034
|
-
* @param {
|
|
1035
|
-
* @
|
|
1036
|
-
* @
|
|
1037
|
-
*
|
|
1070
|
+
* UTC 日期对象转本地时区日期对象
|
|
1071
|
+
* @description 将 UTC 时间的 Date 对象转换为本地时间的 Date 对象(时间戳不变,仅调整时区偏移)
|
|
1072
|
+
* @param {Date} date UTC 日期对象,默认当前 UTC 时间
|
|
1073
|
+
* @returns {Date} 本地时区日期对象(时间戳 = UTC时间戳 + 时区偏移毫秒数)
|
|
1074
|
+
* @example
|
|
1075
|
+
* // UTC时间:2025-01-26 00:00:00
|
|
1076
|
+
* const utcDate = new Date('2025-01-26T00:00:00Z');
|
|
1077
|
+
* const localDate = fromDateUTC(utcDate);
|
|
1078
|
+
* console.log(toDateString(localDate)); // 2025-01-26 08:00:00(北京本地时间)
|
|
1038
1079
|
*/
|
|
1039
|
-
|
|
1040
|
-
|
|
1041
|
-
|
|
1042
|
-
|
|
1043
|
-
|
|
1044
|
-
|
|
1045
|
-
|
|
1046
|
-
|
|
1047
|
-
|
|
1048
|
-
|
|
1049
|
-
|
|
1050
|
-
|
|
1051
|
-
|
|
1052
|
-
|
|
1053
|
-
|
|
1054
|
-
|
|
1055
|
-
|
|
1056
|
-
|
|
1057
|
-
|
|
1058
|
-
|
|
1059
|
-
|
|
1060
|
-
|
|
1061
|
-
|
|
1062
|
-
|
|
1063
|
-
|
|
1064
|
-
|
|
1065
|
-
|
|
1066
|
-
|
|
1067
|
-
|
|
1068
|
-
|
|
1069
|
-
"s+": date.getSeconds(), // 秒
|
|
1070
|
-
"S+": date.getMilliseconds(), // 毫秒
|
|
1071
|
-
"a+": date.getHours() < 12 ? "am" : "pm", // 上午/下午,小写
|
|
1072
|
-
"A+": date.getHours() < 12 ? "AM" : "PM", // 上午/下午,大写
|
|
1073
|
-
"E+": date.getDay(), // 周
|
|
1074
|
-
"Q+": Math.floor((date.getMonth() + 3) / 3), // 季度
|
|
1075
|
-
S: date.getMilliseconds(), // 毫秒
|
|
1076
|
-
};
|
|
1077
|
-
// 年
|
|
1078
|
-
let yearReg = new RegExp(/(y+)/g);
|
|
1079
|
-
if (yearReg.test(format)) {
|
|
1080
|
-
format = format.replace(yearReg, function (match, $1) {
|
|
1081
|
-
return (date.getFullYear() + "").substring(4 - $1.length);
|
|
1082
|
-
});
|
|
1083
|
-
}
|
|
1084
|
-
// 上午/下午
|
|
1085
|
-
let amPmReg = new RegExp(/((b+)|(A+))/g);
|
|
1086
|
-
if (amPmReg.test(format)) {
|
|
1087
|
-
format = format.replace(amPmReg, function (match, $1) {
|
|
1088
|
-
// AA或者aa为中文
|
|
1089
|
-
if ($1.length > 1) {
|
|
1090
|
-
return date.getHours() < 12 ? DATE.AM_PM[lang].AM : DATE.AM_PM[lang].PM;
|
|
1091
|
-
}
|
|
1092
|
-
// 其他为英文
|
|
1093
|
-
else {
|
|
1094
|
-
return $1 === $1.toLowerCase()
|
|
1095
|
-
? date.getHours() < 12
|
|
1096
|
-
? DATE.AM_PM["en"].AM.toLowerCase()
|
|
1097
|
-
: DATE.AM_PM["en"].PM.toLowerCase()
|
|
1098
|
-
: date.getHours() < 12
|
|
1099
|
-
? DATE.AM_PM["en"].AM
|
|
1100
|
-
: DATE.AM_PM["en"].PM;
|
|
1101
|
-
}
|
|
1102
|
-
});
|
|
1103
|
-
}
|
|
1104
|
-
// 周
|
|
1105
|
-
let weekReg = new RegExp(/(E+)/g);
|
|
1106
|
-
if (weekReg.test(format)) {
|
|
1107
|
-
format = format.replace(weekReg, function (match, $1) {
|
|
1108
|
-
return $1.length === 1
|
|
1109
|
-
? DATE.WEEK[lang].MINI[date.getDay()]
|
|
1110
|
-
: $1.length === 2
|
|
1111
|
-
? DATE.WEEK[lang].SHORT[date.getDay()]
|
|
1112
|
-
: DATE.WEEK[lang].FULL[date.getDay()];
|
|
1113
|
-
});
|
|
1114
|
-
}
|
|
1115
|
-
// 季度
|
|
1116
|
-
let quarterReg = new RegExp(/(Q+)/g);
|
|
1117
|
-
if (quarterReg.test(format)) {
|
|
1118
|
-
format = format.replace(quarterReg, function (match, $1) {
|
|
1119
|
-
return $1.length === 1
|
|
1120
|
-
? DATE.QUARTER[lang].MINI[Math.floor((date.getMonth() + 3) / 3) - 1]
|
|
1121
|
-
: $1.length === 2
|
|
1122
|
-
? DATE.QUARTER[lang].SHORT[Math.floor((date.getMonth() + 3) / 3) - 1]
|
|
1123
|
-
: DATE.QUARTER[lang].FULL[Math.floor((date.getMonth() + 3) / 3) - 1];
|
|
1124
|
-
});
|
|
1125
|
-
}
|
|
1126
|
-
// 经过上面的过滤,剩余的日期参数处理
|
|
1127
|
-
for (let k in rules) {
|
|
1128
|
-
let dateReg = new RegExp("(" + k + ")");
|
|
1129
|
-
if (dateReg.test(format)) {
|
|
1130
|
-
format = format.replace(dateReg, function (match, $1) {
|
|
1131
|
-
return $1.length === 1
|
|
1132
|
-
? rules[k]
|
|
1133
|
-
: $1.length === 2
|
|
1134
|
-
? ("00" + rules[k]).substring(("" + rules[k]).length)
|
|
1135
|
-
: ("000" + rules[k]).substring(("" + rules[k]).length);
|
|
1136
|
-
});
|
|
1137
|
-
}
|
|
1138
|
-
}
|
|
1139
|
-
return format;
|
|
1080
|
+
function fromDateUTC(date = new Date()) {
|
|
1081
|
+
return new Date(date.getTime() - date.getTimezoneOffset() * 60 * 1000);
|
|
1082
|
+
}
|
|
1083
|
+
/**
|
|
1084
|
+
* 本地时区日期转 UTC 日期对象
|
|
1085
|
+
* @description 将本地时间的 Date 对象转换为 UTC 时间的 Date 对象(时间戳不变,仅调整时区偏移)
|
|
1086
|
+
* @param {Date} date 本地日期对象,默认当前本地时间
|
|
1087
|
+
* @returns {Date} UTC 日期对象(时间戳 = 本地时间戳 - 时区偏移毫秒数)
|
|
1088
|
+
* @example
|
|
1089
|
+
* // 北京本地时间:2025-01-26 08:00:00(东8区)
|
|
1090
|
+
* const localDate = new Date('2025-01-26 08:00:00');
|
|
1091
|
+
* const utcDate = toDateUTC(localDate);
|
|
1092
|
+
* console.log(utcDate.toISOString()); // 2025-01-26T00:00:00.000Z(UTC时间)
|
|
1093
|
+
*/
|
|
1094
|
+
function toDateUTC(date = new Date()) {
|
|
1095
|
+
return new Date(date.getTime() + date.getTimezoneOffset() * 60 * 1000);
|
|
1096
|
+
}
|
|
1097
|
+
/**
|
|
1098
|
+
* 格式化日期为 UTC 字符串(符合 ISO 8601 标准)
|
|
1099
|
+
* @description 直接输出 UTC 时间的字符串,无需手动转换时区
|
|
1100
|
+
* @param {Date} date 本地日期对象,默认当前本地时间
|
|
1101
|
+
* @param {DateOptions} options 格式化配置,默认 yyyy-MM-dd HH:mm:ss
|
|
1102
|
+
* @returns {string} UTC 日期字符串
|
|
1103
|
+
* @example
|
|
1104
|
+
* const localDate = new Date('2025-01-26 08:00:00');
|
|
1105
|
+
* console.log(toUTCString(localDate)); // 2025-01-26 00:00:00
|
|
1106
|
+
*/
|
|
1107
|
+
function toDataUTCString(date = new Date(), options = { format: "yyyy-MM-dd HH:mm:ss" }) {
|
|
1108
|
+
const utcDate = toDateUTC(date);
|
|
1109
|
+
return toDateString(utcDate, options);
|
|
1140
1110
|
}
|
|
1141
1111
|
/**
|
|
1142
1112
|
* 日期字符串转为日期对象
|
|
1143
1113
|
* @description 支持日期字符串,时间戳,Unix时间戳
|
|
1144
|
-
* @param {
|
|
1114
|
+
* @param {string|number} value 日期参数
|
|
1145
1115
|
* @returns {Date} 返回日期对象
|
|
1146
1116
|
*/
|
|
1147
|
-
function
|
|
1117
|
+
function toDate(value) {
|
|
1148
1118
|
if (isNull(value))
|
|
1149
|
-
return
|
|
1150
|
-
|
|
1151
|
-
|
|
1152
|
-
|
|
1119
|
+
return;
|
|
1120
|
+
try {
|
|
1121
|
+
// 是日期字符串
|
|
1122
|
+
if (isString(value)) {
|
|
1123
|
+
return new Date(String(value).replace(/-/g, "/"));
|
|
1124
|
+
}
|
|
1125
|
+
// 是时间戳
|
|
1126
|
+
else if (isInteger(value) && String(value).length === 13) {
|
|
1127
|
+
return new Date(value);
|
|
1128
|
+
}
|
|
1129
|
+
// 是unix时间戳
|
|
1130
|
+
else if (isInteger(value) && String(value).length === 10) {
|
|
1131
|
+
return new Date(Number(value) * 1000);
|
|
1132
|
+
}
|
|
1133
|
+
// 不支持的日期格式
|
|
1134
|
+
else {
|
|
1135
|
+
console.error("Not supported date format!");
|
|
1136
|
+
return undefined;
|
|
1137
|
+
}
|
|
1153
1138
|
}
|
|
1154
|
-
|
|
1155
|
-
|
|
1156
|
-
return new Date(value);
|
|
1139
|
+
catch (e) {
|
|
1140
|
+
console.error("Parse to Date error", e);
|
|
1157
1141
|
}
|
|
1158
|
-
|
|
1159
|
-
|
|
1160
|
-
|
|
1142
|
+
}
|
|
1143
|
+
/**
|
|
1144
|
+
* 日期对象转为日期字符串
|
|
1145
|
+
* @description 支持日期字符串,日期对象,时间戳,unix时间戳
|
|
1146
|
+
* @param {Date} date 日期参数
|
|
1147
|
+
* @param options 配置项
|
|
1148
|
+
* @returns {string} 返回日期字符串
|
|
1149
|
+
*/
|
|
1150
|
+
function toDateString(date, options = { format: "yyyy-MM-dd", lang: "zh" }) {
|
|
1151
|
+
const { format = "yyyy-MM-dd", lang = "zh" } = options;
|
|
1152
|
+
if (isNull(date))
|
|
1153
|
+
return "";
|
|
1154
|
+
try {
|
|
1155
|
+
// 判断是否是日期对象
|
|
1156
|
+
if (!isDate(date)) {
|
|
1157
|
+
console.error("Not a Date type!");
|
|
1158
|
+
return "";
|
|
1159
|
+
}
|
|
1160
|
+
// 日期转化替换
|
|
1161
|
+
const replaceRules = {
|
|
1162
|
+
// 年(yyyy/yy)
|
|
1163
|
+
"(y+)": (match) => {
|
|
1164
|
+
const year = date.getFullYear().toString();
|
|
1165
|
+
return match.length === 2 ? year.slice(-2) : year;
|
|
1166
|
+
},
|
|
1167
|
+
// 月(M/MM)
|
|
1168
|
+
"(M+)": (match) => {
|
|
1169
|
+
const month = date.getMonth() + 1;
|
|
1170
|
+
return match.length === 1 ? month.toString() : month.toString().padStart(2, "0");
|
|
1171
|
+
},
|
|
1172
|
+
// 日(d/dd)
|
|
1173
|
+
"(d+)": (match) => {
|
|
1174
|
+
const day = date.getDate();
|
|
1175
|
+
return match.length === 1 ? day.toString() : day.toString().padStart(2, "0");
|
|
1176
|
+
},
|
|
1177
|
+
// 12小时制(h/hh)
|
|
1178
|
+
"(h+)": (match) => {
|
|
1179
|
+
const hour = date.getHours() % 12 || 12;
|
|
1180
|
+
return match.length === 1 ? hour.toString() : hour.toString().padStart(2, "0");
|
|
1181
|
+
},
|
|
1182
|
+
// 24小时制(H/HH)
|
|
1183
|
+
"(H+)": (match) => {
|
|
1184
|
+
const hour = date.getHours();
|
|
1185
|
+
return match.length === 1 ? hour.toString() : hour.toString().padStart(2, "0");
|
|
1186
|
+
},
|
|
1187
|
+
// 分钟(m/mm)
|
|
1188
|
+
"(m+)": (match) => {
|
|
1189
|
+
const min = date.getMinutes();
|
|
1190
|
+
return match.length === 1 ? min.toString() : min.toString().padStart(2, "0");
|
|
1191
|
+
},
|
|
1192
|
+
// 秒(s/ss)
|
|
1193
|
+
"(s+)": (match) => {
|
|
1194
|
+
const sec = date.getSeconds();
|
|
1195
|
+
return match.length === 1 ? sec.toString() : sec.toString().padStart(2, "0");
|
|
1196
|
+
},
|
|
1197
|
+
// 毫秒(S/SS/SSS)
|
|
1198
|
+
"(S+)": (match) => {
|
|
1199
|
+
const ms = date.getMilliseconds();
|
|
1200
|
+
return ms.toString().padStart(match.length, "0").slice(0, match.length);
|
|
1201
|
+
},
|
|
1202
|
+
// 上午/下午(a/A/aa/AA)
|
|
1203
|
+
"([aA]+)": (match) => {
|
|
1204
|
+
const isAm = date.getHours() < 12;
|
|
1205
|
+
// 多语言处理
|
|
1206
|
+
if (match.length > 1) {
|
|
1207
|
+
return isAm ? DATE.AM_PM[lang].AM : DATE.AM_PM[lang].PM;
|
|
1208
|
+
}
|
|
1209
|
+
else {
|
|
1210
|
+
return isAm ? match.toLowerCase() : match.toUpperCase();
|
|
1211
|
+
}
|
|
1212
|
+
},
|
|
1213
|
+
// 周(E/EE/EEE)
|
|
1214
|
+
"(E+)": (match) => {
|
|
1215
|
+
const day = date.getDay();
|
|
1216
|
+
if (match.length === 1)
|
|
1217
|
+
return DATE.WEEK[lang].MINI[day];
|
|
1218
|
+
if (match.length === 2)
|
|
1219
|
+
return DATE.WEEK[lang].SHORT[day];
|
|
1220
|
+
return DATE.WEEK[lang].FULL[day];
|
|
1221
|
+
},
|
|
1222
|
+
// 季度(Q/QQ/QQQ)
|
|
1223
|
+
"(Q+)": (match) => {
|
|
1224
|
+
const quarter = Math.floor((date.getMonth() + 3) / 3) - 1;
|
|
1225
|
+
if (match.length === 1)
|
|
1226
|
+
return DATE.QUARTER[lang].MINI[quarter];
|
|
1227
|
+
if (match.length === 2)
|
|
1228
|
+
return DATE.QUARTER[lang].SHORT[quarter];
|
|
1229
|
+
return DATE.QUARTER[lang].FULL[quarter];
|
|
1230
|
+
},
|
|
1231
|
+
};
|
|
1232
|
+
// 批量替换格式
|
|
1233
|
+
let result = format;
|
|
1234
|
+
Object.entries(replaceRules).forEach(([regStr, replaceFn]) => {
|
|
1235
|
+
const reg = new RegExp(regStr, "g");
|
|
1236
|
+
result = result.replace(reg, (_, match) => replaceFn(match));
|
|
1237
|
+
});
|
|
1238
|
+
return result;
|
|
1161
1239
|
}
|
|
1162
|
-
|
|
1163
|
-
|
|
1164
|
-
|
|
1165
|
-
return value;
|
|
1240
|
+
catch (e) {
|
|
1241
|
+
console.error("Date to String error", e);
|
|
1242
|
+
return "";
|
|
1166
1243
|
}
|
|
1167
1244
|
}
|
|
1168
1245
|
/* 内部使用的函数 */
|
|
1169
1246
|
/**
|
|
1170
1247
|
* 单个数字前自动补齐零为两位
|
|
1171
|
-
* @param {
|
|
1172
|
-
* @returns {
|
|
1248
|
+
* @param {string|number} value 可以是数字和字符串
|
|
1249
|
+
* @returns {string} 返回处理后的字符串
|
|
1173
1250
|
*/
|
|
1174
1251
|
function _digit(value) {
|
|
1175
1252
|
value = value.toString();
|
|
1176
1253
|
return value[1] ? value : "0" + value;
|
|
1177
1254
|
}
|
|
1178
1255
|
|
|
1179
|
-
export { addDate, addHours, addMillisecond, addMinutes, addMonth, addQuarter, addSeconds, addWeek, addYear,
|
|
1256
|
+
export { addDate, addHours, addMillisecond, addMinutes, addMonth, addQuarter, addSeconds, addWeek, addYear, fromDateUTC, getAge, getBetweenDates, getBetweenMonths, getBetweenYears, getChineseZodiac, getDate, getDateArray, getDateObject, getDateTime, getDayOfMonth, getDayOfWeek, getDayOfYear, getDaysOfMonth, getDaysOfWeek, getDaysOfYear, getDiffDay, getDiffMonth, getDiffWeek, getDiffYear, getFirstDateOfMonth, getFirstDateOfWeek, getFirstDateOfYear, getFullDateOfMonth, getFullDateOfWeek, getFullDateOfYear, getLastDateOfMonth, getLastDateOfWeek, getLastDateOfYear, getNow, getOverTime, getPastTime, getQuarter, getTimestamp, getUnixTimestamp, getWeek, getWeekOfMonth, getWeekOfYear, getWeeksOfMonth, getWeeksOfYear, getZodiac, isAM, isAfter, isAfterTomorrow, isBefore, isBeforeYesterday, isBetween, isCommonYear, isFirstDayOfMonth, isFirstDayOfWeek, isFirstDayOfYear, isLastDayOfMonth, isLastDayOfWeek, isLastDayOfYear, isLeapYear, isPM, isSame, isSameMonth, isSameOrAfter, isSameOrBefore, isSameWeek, isSameYear, isToday, isTomorrow, isWeekend, isWorkday, isYesterday, lastMonth, lastWeek, lastYear, nextMonth, nextWeek, nextYear, toDataUTCString, toDate, toDateString, toDateUTC, today, tomorrow, yesterday };
|