1
js日期时间函数(经典+完善+实用)
2
3
4
Date.prototype.isLeapYear 判断闰年
5
Date.prototype.Format 日期格式化
6
Date.prototype.DateAdd 日期计算
7
Date.prototype.DateDiff 比较日期差
8
Date.prototype.toString 日期转字符串
9
Date.prototype.toArray 日期分割为数组
10
Date.prototype.DatePart 取日期的部分信息
11
Date.prototype.MaxDayOfDate 取日期所在月的最大天数
12
Date.prototype.WeekNumOfYear 判断日期所在年的第几周
13
StringToDate 字符串转日期型
14
IsValidDate 验证日期有效性
15
CheckDateTime 完整日期时间检查
16
daysBetween 日期天数差
17
18
19
//---------------------------------------------------
20
// 判断闰年
21
//---------------------------------------------------
22
Date.prototype.isLeapYear = function()
23
{
24
return (0==this.getYear()%4&&((this.getYear()%100!=0)||(this.getYear()%400==0)));
25
}
26
27
//---------------------------------------------------
28
// 日期格式化
29
// 格式 YYYY/yyyy/YY/yy 表示年份
30
// MM/M 月份
31
// W/w 星期
32
// dd/DD/d/D 日期
33
// hh/HH/h/H 时间
34
// mm/m 分钟
35
// ss/SS/s/S 秒
36
//---------------------------------------------------
37
Date.prototype.Format = function(formatStr)
38
{
39
var str = formatStr;
40
var Week = ['日','一','二','三','四','五','六'];
41
42
str=str.replace(/yyyy|YYYY/,this.getFullYear());
43
str=str.replace(/yy|YY/,(this.getYear() % 100)>9?(this.getYear() % 100).toString():'0' + (this.getYear() % 100));
44
45
str=str.replace(/MM/,this.getMonth()>9?this.getMonth().toString():'0' + this.getMonth());
46
str=str.replace(/M/g,this.getMonth());
47
48
str=str.replace(/w|W/g,Week[this.getDay()]);
49
50
str=str.replace(/dd|DD/,this.getDate()>9?this.getDate().toString():'0' + this.getDate());
51
str=str.replace(/d|D/g,this.getDate());
52
53
str=str.replace(/hh|HH/,this.getHours()>9?this.getHours().toString():'0' + this.getHours());
54
str=str.replace(/h|H/g,this.getHours());
55
str=str.replace(/mm/,this.getMinutes()>9?this.getMinutes().toString():'0' + this.getMinutes());
56
str=str.replace(/m/g,this.getMinutes());
57
58
str=str.replace(/ss|SS/,this.getSeconds()>9?this.getSeconds().toString():'0' + this.getSeconds());
59
str=str.replace(/s|S/g,this.getSeconds());
60
61
return str;
62
}
63
64
//+---------------------------------------------------
65
//| 求两个时间的天数差 日期格式为 YYYY-MM-dd
66
//+---------------------------------------------------
67
function daysBetween(DateOne,DateTwo)
68
{
69
var OneMonth = DateOne.substring(5,DateOne.lastIndexOf ('-'));
70
var OneDay = DateOne.substring(DateOne.length,DateOne.lastIndexOf ('-')+1);
71
var OneYear = DateOne.substring(0,DateOne.indexOf ('-'));
72
73
var TwoMonth = DateTwo.substring(5,DateTwo.lastIndexOf ('-'));
74
var TwoDay = DateTwo.substring(DateTwo.length,DateTwo.lastIndexOf ('-')+1);
75
var TwoYear = DateTwo.substring(0,DateTwo.indexOf ('-'));
76
77
var cha=((Date.parse(OneMonth+'/'+OneDay+'/'+OneYear)- Date.parse(TwoMonth+'/'+TwoDay+'/'+TwoYear))/86400000);
78
return Math.abs(cha);
79
}
80
81
82
//+---------------------------------------------------
83
//| 日期计算
84
//+---------------------------------------------------
85
Date.prototype.DateAdd = function(strInterval, Number) {
86
var dtTmp = this;
87
switch (strInterval) {
88
case 's' :return new Date(Date.parse(dtTmp) + (1000 * Number));
89
case 'n' :return new Date(Date.parse(dtTmp) + (60000 * Number));
90
case 'h' :return new Date(Date.parse(dtTmp) + (3600000 * Number));
91
case 'd' :return new Date(Date.parse(dtTmp) + (86400000 * Number));
92
case 'w' :return new Date(Date.parse(dtTmp) + ((86400000 * 7) * Number));
93
case 'q' :return new Date(dtTmp.getFullYear(), (dtTmp.getMonth()) + Number*3, dtTmp.getDate(), dtTmp.getHours(), dtTmp.getMinutes(), dtTmp.getSeconds());
94
case 'm' :return new Date(dtTmp.getFullYear(), (dtTmp.getMonth()) + Number, dtTmp.getDate(), dtTmp.getHours(), dtTmp.getMinutes(), dtTmp.getSeconds());
95
case 'y' :return new Date((dtTmp.getFullYear() + Number), dtTmp.getMonth(), dtTmp.getDate(), dtTmp.getHours(), dtTmp.getMinutes(), dtTmp.getSeconds());
96
}
97
}
98
99
//+---------------------------------------------------
100
//| 比较日期差 dtEnd 格式为日期型或者 有效日期格式字符串
101
//+---------------------------------------------------
102
Date.prototype.DateDiff = function(strInterval, dtEnd) {
103
var dtStart = this;
104
if (typeof dtEnd == 'string' )//如果是字符串转换为日期型
105
{
106
dtEnd = StringToDate(dtEnd);
107
}
108
switch (strInterval) {
109
case 's' :return parseInt((dtEnd - dtStart) / 1000);
110
case 'n' :return parseInt((dtEnd - dtStart) / 60000);
111
case 'h' :return parseInt((dtEnd - dtStart) / 3600000);
112
case 'd' :return parseInt((dtEnd - dtStart) / 86400000);
113
case 'w' :return parseInt((dtEnd - dtStart) / (86400000 * 7));
114
case 'm' :return (dtEnd.getMonth()+1)+((dtEnd.getFullYear()-dtStart.getFullYear())*12) - (dtStart.getMonth()+1);
115
case 'y' :return dtEnd.getFullYear() - dtStart.getFullYear();
116
}
117
}
118
119
//+---------------------------------------------------
120
//| 日期输出字符串,重载了系统的toString方法
121
//+---------------------------------------------------
122
Date.prototype.toString = function(showWeek)
123
{
124
var myDate= this;
125
var str = myDate.toLocaleDateString();
126
if (showWeek)
127
{
128
var Week = ['日','一','二','三','四','五','六'];
129
str += ' 星期' + Week[myDate.getDay()];
130
}
131
return str;
132
}
133
134
//+---------------------------------------------------
135
//| 日期合法性验证
136
//| 格式为:YYYY-MM-DD或YYYY/MM/DD
137
//+---------------------------------------------------
138
function IsValidDate(DateStr)
139
{
140
var sDate=DateStr.replace(/(^\s+|\s+$)/g,''); //去两边空格;
141
if(sDate=='') return true;
142
//如果格式满足YYYY-(/)MM-(/)DD或YYYY-(/)M-(/)DD或YYYY-(/)M-(/)D或YYYY-(/)MM-(/)D就替换为''
143
//数据库中,合法日期可以是:YYYY-MM/DD(2003-3/21),数据库会自动转换为YYYY-MM-DD格式
144
var s = sDate.replace(/[\d]{ 4,4 }[\-/]{ 1 }[\d]{ 1,2 }[\-/]{ 1 }[\d]{ 1,2 }/g,'');
145
if (s=='') //说明格式满足YYYY-MM-DD或YYYY-M-DD或YYYY-M-D或YYYY-MM-D
146
{
147
var t=new Date(sDate.replace(/\-/g,'/'));
148
var ar = sDate.split(/[-/:]/);
149
if(ar[0] != t.getYear() || ar[1] != t.getMonth()+1 || ar[2] != t.getDate())
150
{
151
//alert('错误的日期格式!格式为:YYYY-MM-DD或YYYY/MM/DD。注意闰年。');
152
return false;
153
}
154
}
155
else
156
{
157
//alert('错误的日期格式!格式为:YYYY-MM-DD或YYYY/MM/DD。注意闰年。');
158
return false;
159
}
160
return true;
161
}
162
163
//+---------------------------------------------------
164
//| 日期时间检查
165
//| 格式为:YYYY-MM-DD HH:MM:SS
166
//+---------------------------------------------------
167
function CheckDateTime(str)
168
{
169
var reg = /^(\d+)-(\d{ 1,2 })-(\d{ 1,2 }) (\d{ 1,2 }):(\d{ 1,2 }):(\d{ 1,2 })$/;
170
var r = str.match(reg);
171
if(r==null)return false;
172
r[2]=r[2]-1;
173
var d= new Date(r[1],r[2],r[3],r[4],r[5],r[6]);
174
if(d.getFullYear()!=r[1])return false;
175
if(d.getMonth()!=r[2])return false;
176
if(d.getDate()!=r[3])return false;
177
if(d.getHours()!=r[4])return false;
178
if(d.getMinutes()!=r[5])return false;
179
if(d.getSeconds()!=r[6])return false;
180
return true;
181
}
182
183
//+---------------------------------------------------
184
//| 把日期分割成数组
185
//+---------------------------------------------------
186
Date.prototype.toArray = function()
187
{
188
var myDate = this;
189
var myArray = Array();
190
myArray[0] = myDate.getFullYear();
191
myArray[1] = myDate.getMonth();
192
myArray[2] = myDate.getDate();
193
myArray[3] = myDate.getHours();
194
myArray[4] = myDate.getMinutes();
195
myArray[5] = myDate.getSeconds();
196
return myArray;
197
}
198
199
//+---------------------------------------------------
200
//| 取得日期数据信息
201
//| 参数 interval 表示数据类型
202
//| y 年 m月 d日 w星期 ww周 h时 n分 s秒
203
//+---------------------------------------------------
204
Date.prototype.DatePart = function(interval)
205
{
206
var myDate = this;
207
var partStr='';
208
var Week = ['日','一','二','三','四','五','六'];
209
switch (interval)
210
{
211
case 'y' :partStr = myDate.getFullYear();break;
212
case 'm' :partStr = myDate.getMonth()+1;break;
213
case 'd' :partStr = myDate.getDate();break;
214
case 'w' :partStr = Week[myDate.getDay()];break;
215
case 'ww' :partStr = myDate.WeekNumOfYear();break;
216
case 'h' :partStr = myDate.getHours();break;
217
case 'n' :partStr = myDate.getMinutes();break;
218
case 's' :partStr = myDate.getSeconds();break;
219
}
220
return partStr;
221
}
222
223
//+---------------------------------------------------
224
//| 取得当前日期所在月的最大天数
225
//+---------------------------------------------------
226
Date.prototype.MaxDayOfDate = function()
227
{
228
var myDate = this;
229
var ary = myDate.toArray();
230
var date1 = (new Date(ary[0],ary[1]+1,1));
231
var date2 = date1.dateAdd(1,'m',1);
232
var result = dateDiff(date1.Format('yyyy-MM-dd'),date2.Format('yyyy-MM-dd'));
233
return result;
234
}
235
236
//+---------------------------------------------------
237
//| 取得当前日期所在周是一年中的第几周
238
//+---------------------------------------------------
239
Date.prototype.WeekNumOfYear = function()
240
{
241
var myDate = this;
242
var ary = myDate.toArray();
243
var year = ary[0];
244
var month = ary[1]+1;
245
var day = ary[2];
246
document.write('< script language=VBScript\> \n');
247
document.write('myDate = DateValue(''+month+'-'+day+'-'+year+'') \n');
248
document.write('result = DatePart('ww', myDate) \n');
249
document.write(' \n');
250
return result;
251
}
252
253
//+---------------------------------------------------
254
//| 字符串转成日期类型
255
//| 格式 MM/dd/YYYY MM-dd-YYYY YYYY/MM/dd YYYY-MM-dd
256
//+---------------------------------------------------
257
function StringToDate(DateStr)
258
{
259
260
var converted = Date.parse(DateStr);
261
var myDate = new Date(converted);
262
if (isNaN(myDate))
263
{
264
//var delimCahar = DateStr.indexOf('/')!=-1?'/':'-';
265
var arys= DateStr.split('-');
266
myDate = new Date(arys[0],--arys[1],arys[2]);
267
}
268
return myDate;
269
}
270

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
