javascript中对Date类型的常用操作小结
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
|
/**
3. * 日期时间脚本库方法列表:
4. * (1)Date.isValiDate:日期合法性验证
5. * (2)Date.isValiTime:时间合法性验证
6. * (3)Date.isValiDateTime:日期和时间合法性验证
7. * (4)Date.prototype.isLeapYear:判断是否闰年
8. * (5)Date.prototype.format:日期格式化
9. * (6)Date.stringToDate:字符串转成日期类型
10. * (7)Date.daysBetween:计算两个日期的天数差
11. * (8)Date.prototype.dateAdd:日期计算,支持正负数
12. * (9)Date.prototype.dateDiff:比较日期差:比较两个时期相同的字段,返回相差值
13. * (10)Date.prototype.toArray:把日期分割成数组:按数组序号分别为:年月日时分秒
14. * (11)Date.prototype.datePart:取得日期数据信息
15. */
16.
17.
18.
/**
19. * 日期合法性验证:判断dataStr是否符合formatStr指定的日期格式
20. * 示例:
21. * (1)alert(Date.isValiDate('2008-02-29','yyyy-MM-dd'));//true
22. * (2)alert(Date.isValiDate('aaaa-58-29','yyyy-MM-dd'));//false
23. * dateStr:必选,日期字符串
24. * formatStr:可选,格式字符串,可选格式有:(1)yyyy-MM-dd(默认格式)或YYYY-MM-DD (2)yyyy/MM/dd或YYYY/MM/DD (3)MM-dd-yyyy或MM-DD-YYYY (4)MM/dd/yyyy或MM/DD/YYYY
25. */
26.Date.isValiDate =
function
(dateStr, formatStr)
27.{
28.
if
(!dateStr){
29.
return
false
;
30. }
31.
if
(!formatStr){
32. formatStr =
"yyyy-MM-dd"
;
//默认格式:yyyy-MM-dd
33. }
34.
if
(dateStr.length!=formatStr.length){
35.
return
false
;
36. }
else
{
37.
if
(formatStr==
"yyyy-MM-dd"
||formatStr==
"YYYY-MM-DD"
){
38.
var
r1=/^(((((([02468][048])|([13579][26]))(00))|(\d{2}(([02468][48])|([13579][26]))))\-((((0[13578])|(1[02]))\-(([0-2][0-9])|(3[01])))|(((0[469])|(11))\-(([0-2][0-9])|(30)))|(02\-([0-2][0-9]))))|(\d{2}(([02468][1235679])|([13579][01345789]))\-((((0[13578])|(1[02]))\-(([0-2][0-9])|(3[01])))|(((0[469])|(11))\-(([0-2][0-9])|(30)))|(02\-(([0-1][0-9])|(2[0-8]))))))$/;
39.
return
r1.test(dateStr);
40. }
else
if
(formatStr==
"yyyy/MM/dd"
||formatStr==
"YYYY/MM/DD"
){
41.
var
r2=/^(((((([02468][048])|([13579][26]))(00))|(\d{2}(([02468][48])|([13579][26]))))\/((((0[13578])|(1[02]))\/(([0-2][0-9])|(3[01])))|(((0[469])|(11))\/(([0-2][0-9])|(30)))|(02\/([0-2][0-9]))))|(\d{2}(([02468][1235679])|([13579][01345789]))\/((((0[13578])|(1[02]))\/(([0-2][0-9])|(3[01])))|(((0[469])|(11))\/(([0-2][0-9])|(30)))|(02\/(([0-1][0-9])|(2[0-8]))))))$/;
42.
return
r2.test(dateStr);
43. }
else
if
(formatStr==
"MM-dd-yyyy"
||formatStr==
"MM-DD-YYYY"
){
44.
var
r3=/^((((((0[13578])|(1[02]))\-(([0-2][0-9])|(3[01])))|(((0[469])|(11))\-(([0-2][0-9])|(30)))|(02\-([0-2][0-9])))\-(((([02468][048])|([13579][26]))(00))|(\d{2}(([02468][48])|([13579][26])))))|(((((0[13578])|(1[02]))\-(([0-2][0-9])|(3[01])))|(((0[469])|(11))\-(([0-2][0-9])|(30)))|(02\-(([0-1][0-9])|(2[0-8])))))\-\d{2}(([02468][1235679])|([13579][01345789])))$/;
45.
return
r3.test(dateStr);
46. }
else
if
(formatStr==
"MM/dd/yyyy"
||formatStr==
"MM/DD/YYYY"
){
47.
var
r4=/^((((((0[13578])|(1[02]))\/(([0-2][0-9])|(3[01])))|(((0[469])|(11))\/(([0-2][0-9])|(30)))|(02\/([0-2][0-9])))\/(((([02468][048])|([13579][26]))(00))|(\d{2}(([02468][48])|([13579][26])))))|(((((0[13578])|(1[02]))\/(([0-2][0-9])|(3[01])))|(((0[469])|(11))\/(([0-2][0-9])|(30)))|(02\/(([0-1][0-9])|(2[0-8])))))\/\d{2}(([02468][1235679])|([13579][01345789])))$/;
48.
return
r4.test(dateStr);
49. }
else
{
50. alert(
"日期格式不正确!"
);
51.
return
false
;
52. }
53. }
54.
return
false
;
55.}
56.
57.
58.
/**
59. * 时间合法性验证:判断timeStr是否符合formatStr指定的时间格式
60. * 示例:
61. * (1)alert(Date.isValiTime('23:59:59','hh:mm:ss'));//true
62. * (2)alert(Date.isValiTime('24-68-89','hh:mm:ss'));//false
63. * timeStr:必选,日期字符串
64. * formatStr:可选,格式字符串,可选格式有:(1)hh:mm:ss(默认格式) (2)hh-mm-ss (3)hh/mm/ss
65. */
66.Date.isValiTime =
function
(timeStr, formatStr)
67.{
68.
if
(!timeStr){
69.
return
false
;
70. }
71.
if
(!formatStr){
72. formatStr =
"hh:mm:ss"
;
//默认格式:hh:mm:ss
73. }
74.
if
(timeStr.length!=formatStr.length){
75.
return
false
;
76. }
else
{
77.
if
(formatStr==
"hh:mm:ss"
){
78.
var
r1=/^(([0-1][0-9])|(2[0-3]))\:([0-5][0-9])\:([0-5][0-9])$/;
79.
return
r1.test(timeStr);
80. }
else
if
(formatStr==
"hh-mm-ss"
){
81.
var
r2=/^(([0-1][0-9])|(2[0-3]))\-([0-5][0-9])\-([0-5][0-9])$/;
82.
return
r2.test(timeStr);
83. }
else
if
(formatStr==
"hh/mm/ss"
){
84.
var
r3=/^(([0-1][0-9])|(2[0-3]))\/([0-5][0-9])\/([0-5][0-9])$/;
85.
return
r3.test(timeStr);
86. }
else
{
87. alert(
"时间格式不正确!"
);
88.
return
false
;
89. }
90. }
91.
return
false
;
92.}
93.
94.
95.
/**
96. * 日期和时间合法性验证
97. * 格式:yyyy-MM-dd hh:mm:ss
98. */
99.Date.isValiDateTime =
function
(dateTimeStr)
100.{
101.
var
dateTimeReg=/^(((((([02468][048])|([13579][26]))(00))|(\d{2}(([02468][48])|([13579][26]))))\-((((0[13578])|(1[02]))\-(([0-2][0-9])|(3[01])))|(((0[469])|(11))\-(([0-2][0-9])|(30)))|(02\-([0-2][0-9]))))|(\d{2}(([02468][1235679])|([13579][01345789]))\-((((0[13578])|(1[02]))\-(([0-2][0-9])|(3[01])))|(((0[469])|(11))\-(([0-2][0-9])|(30)))|(02\-(([0-1][0-9])|(2[0-8]))))))(\s{1}(([0-1][0-9])|(2[0-3]))\:([0-5][0-9])\:([0-5][0-9]))?$/
102.
return
dateTimeReg.test(dateTimeStr);
103.}
104.
105.
106.
/**
107. * 判断闰年 :一般规律为:四年一闰,百年不闰,四百年再闰。
108. */
109.Date.prototype.isLeapYear =
function
()
110.{
111.
return
(
this
.getYear()%4==0&&((
this
.getYear()%100!=0)||(
this
.getYear()%400==0)));
112.}
113.
114.
115.
/**
116. * 日期格式化:
117. * formatStr:可选,格式字符串,默认格式:yyyy-MM-dd hh:mm:ss
118. * 约定如下格式:
119. * (1)YYYY/yyyy/YY/yy 表示年份
120. * (2)MM/M 月份
121. * (3)W/w 星期
122. * (4)dd/DD/d/D 日期
123. * (5)hh/HH/h/H 时间
124. * (6)mm/m 分钟
125. * (7)ss/SS/s/S 秒
126. * (8)iii 毫秒
127. */
128.Date.prototype.format =
function
(formatStr)
129.{
130.
var
str = formatStr;
131.
if
(!formatStr){
132. str =
"yyyy-MM-dd hh:mm:ss"
;
//默认格式
133. }
134.
var
Week = [
'日'
,
'一'
,
'二'
,
'三'
,
'四'
,
'五'
,
'六'
];
135.
136. str=str.replace(/yyyy|YYYY/,
this
.getFullYear());
137. str=str.replace(/yy|YY/,(
this
.getYear() % 100)>9?(
this
.getYear() % 100).toString():
'0'
+ (
this
.getYear() % 100));
138.
139. str=str.replace(/MM/,
this
.getMonth()>=9?(parseInt(
this
.getMonth())+1).toString():
'0'
+ (parseInt(
this
.getMonth())+1));
140. str=str.replace(/M/g,(parseInt(
this
.getMonth())+1));
141.
142. str=str.replace(/w|W/g,Week[
this
.getDay()]);
143.
144. str=str.replace(/dd|DD/,
this
.getDate()>9?
this
.getDate().toString():
'0'
+
this
.getDate());
145. str=str.replace(/d|D/g,
this
.getDate());
146.
147. str=str.replace(/hh|HH/,
this
.getHours()>9?
this
.getHours().toString():
'0'
+
this
.getHours());
148. str=str.replace(/h|H/g,
this
.getHours());
149. str=str.replace(/mm/,
this
.getMinutes()>9?
this
.getMinutes().toString():
'0'
+
this
.getMinutes());
150. str=str.replace(/m/g,
this
.getMinutes());
151.
152. str=str.replace(/ss|SS/,
this
.getSeconds()>9?
this
.getSeconds().toString():
'0'
+
this
.getSeconds());
153. str=str.replace(/s|S/g,
this
.getSeconds());
154.
155. str=str.replace(/iii/g,
this
.getMilliseconds()<10?
'00'
+
this
.getMilliseconds():(
this
.getMilliseconds()<100?
'0'
+
this
.getMilliseconds():
this
.getMilliseconds()));
156.
157.
return
str;
158.}
159.
160.
161.
/**
162. * 字符串转成日期类型:
163. * dateStr:必选,日期字符串,如果无法解析成日期类型,返回null
164. * 格式:
165. * (1)yyyy/MM/dd:IE和FF通用
166. * (2)MM/dd/yyyy:IE和FF通用
167. * (3)MM-dd-yyyy:仅IE
168. * (4)yyyy-MM-dd:非IE,且时钟被解析在8点整
169. */
170.Date.stringToDate =
function
(dateStr)
171.{
172.
if
(!dateStr){
173. alert(
"字符串无法解析为日期"
);
174.
return
null
;
175. }
else
{
176.
if
(Date.isValiDate(dateStr,
"yyyy/MM/dd"
)||Date.isValiDate(dateStr,
"MM/dd/yyyy"
)){
177.
return
new
Date(Date.parse(dateStr));
178. }
else
{
179.
if
((!-[1,])){
//IE
180.
if
(Date.isValiDate(dateStr,
"MM-dd-yyyy"
)){
181.
return
new
Date(Date.parse(dateStr));
182. }
else
{
183. alert(
"字符串无法解析为日期"
);
184.
return
null
;
185. }
186. }
else
{
//非IE
187.
if
(Date.isValiDate(dateStr,
"yyyy-MM-dd"
)){
188.
return
new
Date(Date.parse(dateStr));
189. }
else
{
190. alert(
"字符串无法解析为日期"
);
191.
return
null
;
192. }
193. }
194. }
195. }
196.
return
null
;
197.}
198.
199.
200.
/**
201. * 计算两个日期的天数差:
202. * dateOne:必选,必须是Data类型的实例
203. * dateTwo:必选,必须是Data类型的实例
204. */
205.Date.daysBetween =
function
(dateOne,dateTwo)
206.{
207.
if
((dateOne
instanceof
Date)==
false
||(dateTwo
instanceof
Date)==
false
){
208.
return
0;
209. }
else
{
210.
return
Math.abs(Math.floor((dateOne.getTime()-dateTwo.getTime())/1000/60/60/24));
211. }
212.}
213.
214.
215.
/**
216. * 日期计算:支持负数,即可加可减,返回计算后的日期
217. * num:必选,必须是数字,且正数是时期加,负数是日期减
218. * field:可选,标识是在哪个字段上进行相加或相减,字段见如下的约定。无此参数时,默认为d
219. * 约定如下格式:
220. * (1)Y/y 年
221. * (2)M 月
222. * (3)W/w 周
223. * (4)D/d 日
224. * (5)H/h 时
225. * (6)m 分
226. * (7)S/s 秒
227. * (8)Q/q 季
228. */
229.Date.prototype.dateAdd =
function
(num, field)
230.{
231.
if
((!num)||isNaN(num)||parseInt(num)==0){
232.
return
this
;
233. }
234.
if
(!field){
235. field =
"d"
;
236. }
237.
switch
(field){
238.
case
'Y'
:
239.
case
'y'
:
return
new
Date((
this
.getFullYear()+num),
this
.getMonth(),
this
.getDate(),
this
.getHours(),
this
.getMinutes(),
this
.getSeconds());
break
;
240.
case
'Q'
:
241.
case
'q'
:
return
new
Date(
this
.getFullYear(), (
this
.getMonth()+num*3),
this
.getDate(),
this
.getHours(),
this
.getMinutes(),
this
.getSeconds());
break
;
242.
case
'M'
:
return
new
Date(
this
.getFullYear(),
this
.getMonth()+num,
this
.getDate(),
this
.getHours(),
this
.getMinutes(),
this
.getSeconds());
break
;
243.
case
'W'
:
244.
case
'w'
:
return
new
Date(Date.parse(
this
) + ((86400000 * 7) * num));
break
;
245.
case
'D'
:
246.
case
'd'
:
return
new
Date(Date.parse(
this
) + (86400000 * num));
break
;
247.
case
'H'
:
248.
case
'h'
:
return
new
Date(Date.parse(
this
) + (3600000 * num));
break
;
249.
case
'm'
:
return
new
Date(Date.parse(
this
) + (60000 * num));
break
;
250.
case
'S'
:
251.
case
's'
:
return
new
Date(Date.parse(
this
) + (1000 * num));
break
;
252.
default
:
return
this
;
253. }
254.
return
this
;
255.}
256.
257.
258.
/**
259. * 比较日期差:比较两个时期相同的字段,返回相差值
260. * dtEnd:必选,必须是Data类型的实例
261. * field:可选,标识是在哪个字段上进行比较,字段见如下的约定。无此参数时,默认为d
262. * 约定如下格式:
263. * (1)Y/y 年
264. * (2)M 月
265. * (3)W/w 周
266. * (4)D/d 日
267. * (5)H/h 时
268. * (6)m 分
269. * (7)S/s 秒
270. */
271.Date.prototype.dateDiff =
function
(dtEnd, field)
272.{
273.
var
dtStart =
this
;
274.
if
((dtEnd
instanceof
Date)==
false
){
275.
return
0;
276. }
else
{
277.
if
(!field){
278. field =
"d"
;
279. }
280.
switch
(field){
281.
case
'Y'
:
282.
case
'y'
:
return
dtEnd.getFullYear() - dtStart.getFullYear();
break
;
283.
case
'M'
:
return
(dtEnd.getMonth()+1)+((dtEnd.getFullYear()-dtStart.getFullYear())*12) - (dtStart.getMonth()+1);
break
;
284.
case
'W'
:
285.
case
'w'
:
return
parseInt((dtEnd - dtStart) / (86400000 * 7));
break
;
286.
case
'D'
:
287.
case
'd'
:
return
parseInt((dtEnd - dtStart) / 86400000);
break
;
288.
case
'H'
:
289.
case
'h'
:
return
parseInt((dtEnd - dtStart) / 3600000);
break
;
290.
case
'm'
:
return
parseInt((dtEnd - dtStart) / 60000);
break
;
291.
case
'S'
:
292.
case
's'
:
return
parseInt((dtEnd - dtStart) / 1000);
break
;
293.
default
:
return
0;
294. }
295.
return
0;
296. }
297.}
298.
299.
300.
/**
301. * 把日期分割成数组:按数组序号分别为:年月日时分秒
302. */
303.Date.prototype.toArray =
function
()
304.{
305.
var
myArray =
new
Array();
306. myArray[0] =
this
.getFullYear();
307. myArray[1] =
this
.getMonth();
308. myArray[2] =
this
.getDate();
309. myArray[3] =
this
.getHours();
310. myArray[4] =
this
.getMinutes();
311. myArray[5] =
this
.getSeconds();
312.
return
myArray;
313.}
314.
315.
316.
/**
317. * 取得日期数据信息:
318. * field:可选,标识是在哪个字段上进行比较,字段见如下的约定。无此参数时,默认为d
319. * (1)Y/y 年
320. * (2)M 月
321. * (3)W/w 周
322. * (4)D/d 日
323. * (5)H/h 时
324. * (6)m 分
325. * (7)S/s 秒
326. */
327.Date.prototype.datePart =
function
(field)
328.{
329.
if
(!field){
330. field =
"d"
;
331. }
332.
var
Week = [
'日'
,
'一'
,
'二'
,
'三'
,
'四'
,
'五'
,
'六'
];
333.
switch
(field){
334.
case
'Y'
:
335.
case
'y'
:
return
this
.getFullYear();
break
;
336.
case
'M'
:
return
(
this
.getMonth()+1);
break
;
337.
case
'W'
:
338.
case
'w'
:
return
Week[
this
.getDay()];
break
;
339.
case
'D'
:
340.
case
'd'
:
return
this
.getDate();
break
;
341.
case
'H'
:
342.
case
'h'
:
return
this
.getHours();
break
;
343.
case
'm'
:
return
this
.getMinutes();
break
;
344.
case
's'
:
return
this
.getSeconds();
break
;
345.
default
:
return
this
.getDate();
346. }
347.
return
this
.getDate();
348.}
|
以上这篇javascript中对Date类型的常用操作小结就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持IT工厂。
原文地址:http://www.link588.com/html/wangluobiancheng/138518.html
推荐阅读:
- 基于jQuery的Web上传插件Uploadify使用示例
- JavaScript中的数组遍历forEach()与map()方法以及兼容写法介绍
- JavaScript中解决多浏览器兼容性23个问题的快速解决方法
- javascript面向对象程序设计高级特性经典教程(值得收藏)
- JavaScript中的ParseInt("08")和“09”返回0的原因分析及解决办法
- javascript中JSON.parse()与eval()解析json的区别
- JavaScript:Array类型全面解析
- JavaScript:Date类型全面解析
- 如何判断Javascript对象是否存在的简单实例
- 深入理解JavaScript中的对象复制(Object Clone)
- 在JavaScript中对HTML进行反转义详解
- 深入理解JavaScript中的浮点数
- JavaScript 基础函数_深入剖析变量和作用域
- 实现JavaScript的组成----BOM和DOM详解
- Adapter适配器模式在JavaScript设计模式编程中的运用分析
- 详解JavaScript实现设计模式中的适配器模式的方法
- 深入剖析javascript中的exec与match方法
- 设计模式中的facade外观模式在JavaScript开发中的运用
- JQuery.validate在ie8下不支持的快速解决方法
- 12个非常实用的JavaScript小技巧【推荐】