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