1 double-
date.js代码
2
3 $(
function() {
4 var dateStr = '<div class="date-list"><div class="header clearfix"><div class="header-left fl"><</div><div class="fl"><select class="year"></select></div><div class="fl"><select class="month"><option value="1">1月</option><option value="2">2月</option><option value="3">3月</option><option value="4">4月</option><option value="5">5月</option><option value="6">6月</option><option value="7">7月</option><option value="8">8月</option><option value="9">9月</option><option value="10">10月</option><option value="11">11月</option><option value="12">12月</option></select></div><div class="header-right fl">></div><div class="fr today">今日</div><div class="fl cls">清空</div></div><table class="dateTable"><thead><tr><th>一</th><th>二</th><th>三</th><th>四</th><th>五</th><th>六</th><th>日</th></tr></thead><tbody><tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr></tbody></table></div>'
5 $(dateStr).appendTo($(".date"
));
6 var $date0 = $(".date:first"
),
7 $date1 = $(".date:eq(1)"
),
8 $date_check0 = $(".date-check:first"
),
9 $date_check1 = $(".date-check:eq(1)"
),
10 $date_list0 = $(".date-list:first"
),
11 $date_list1 = $(".date-list:eq(1)"
),
12 $y0 = $(".year:first"
),
13 $y1 = $(".year:eq(1)"
),
14 $m0 = $(".month:first"
),
15 $m1 = $(".month:eq(1)"
),
16 today =
new Date(),
17 today_year = today.getFullYear() + ""
,
18 today_month = (today.getMonth() + 1) + ""
,
19 today_date = today.getDate() + ""
,
20 today_str = today_year + "-" + zero(today_month) + "-" +
zero(today_date);
21 flag0 = 1
,
22 flag1 = 1
;
23 for (
var i = 1917; i < 2118; i++
) {
24 var opt = "<option>" + i + "</option>"
;
25 $(opt).appendTo($y0);
26 $(opt).appendTo($y1);
27 }
28
29 function clearTDcss($td) {
30 $td.unbind("mouseenter").unbind("mouseleave"
);
31 var td = $td[0
];
32 td.style.background = "#FED"
;
33 td.style.color = "#000"
;
34 }
35 function clearTDcss_($td) {
36 clearTDcss($td);
37
38 $td.hover(
function() {
39 $(
this).css({
40 "background" : "#ccc"
,
41 "color" : "#fff"
42 });
43 },
function() {
44 $(
this).css({
45 "background" : "#FED"
,
46 "color" : "black"
47 });
48 });
49 }
50 function setTDcss($td, c) {
51 var td = $td[0
];
52 td.style.color = "#fff"
;
53 if (c == 'now'
)
54 td.style.background = "#00cdec"
;
55 else if (c == 'current'
) {
56 td.style.background = "#66ff00"
;
57 $td.unbind("mouseenter").unbind("mouseleave"
);
58 }
59 }
60 //月份和日期小于10的补0
61 function zero(num) {
62 return num >= 10 ? num : "0" +
num;
63 }
64 function check() {
65 var from =
$date_check0.val(),
66 to =
$date_check1.val();
67 var from_seconds = from == '' ? 0 :
new Date(from.replace("-", "/").replace("-", "/"
)).getTime(),
68 to_seconds = to == '' ? 0 :
new Date(to.replace("-", "/").replace("-", "/"
)).getTime();
69
70 var maxDateSpan = $date0.attr("maxDateSpan"
);
71 if (!
isNaN(maxDateSpan))
72 maxDateSpan =
parseInt(maxDateSpan);
73 else
74 maxDateSpan = 0
;
75
76 var errMsg =
null;
77 if (from != "" && to != "" && from_seconds >
to_seconds)
78 errMsg = "截止日期不能早于起始日期!"
;
79 else if (maxDateSpan > 0 && (from == '' || to == ''
))
80 errMsg = "如果限定了时间间隔的最大天数,则起始日期和截止日期都不能为空!"
;
81 else if (maxDateSpan > 0 && to_seconds - from_seconds > 1000 * 60 * 60 * 24 * (maxDateSpan - 1
))
82 errMsg = "时间间隔不能超过 " + maxDateSpan + " 天!"
;
83
84 if (errMsg ==
null) {
85 $date0.removeClass("date-error"
);
86 $date1.removeClass("date-error"
);
87 }
else {
88 $date0.addClass("date-error"
);
89 $date1.addClass("date-error"
);
90 alert(errMsg);
91 }
92 }
93 function updateDateTds($date_list, year, month, curYear, curMonth, curDate) {
94 var lastDay =
new Date(year, month, 0
).getDate();
95 var firstDate =
new Date(year, month - 1, 1
);
96 var firstDay =
firstDate.getDay();
97 if (firstDay == 0
)
98 firstDay = 7
;
99
100 var num = 1
;
101 $date_list.find("td").each(
function() {
102 var $eq = $(
this).index() + 1
;
103 //给td赋值
104 if ($eq < firstDay && $(
this).parent("tr").index() === 0
)
105 $(
this).html(""
);
106 else if (num <=
lastDay)
107 $(
this).html(num++
);
108 else
109 $(
this).html(""
)
110
111 var d = $(
this).html();
112 //去掉内容为空的tr
113 if (d == "" && $(
this).siblings().html() == ""
)
114 $(
this).parents("tr").css("display", "none"
);
115 else
116 $(
this).parents("tr").css("display", "table-row"
)
117
118 clearTDcss($(
this));
119 if (year == today_year && month == today_month && d ==
today_date)
120 setTDcss($(
this), "now"
);
121 else if (year == curYear && month == curMonth && d ==
curDate)
122 setTDcss($(
this), "current"
);
123
124 $(
this).hover(
function() {
125 if (d != '' && (year != today_year || month != today_month || d != today_date) && (year != curYear || month != curMonth || d !=
curDate))
126 $(
this).css({
127 "background" : "#ccc"
,
128 "color" : "#fff"
129 });
130 },
function() {
131 if (d != '' && (year != today_year || month != today_month || d != today_date) && (year != curYear || month != curMonth || d !=
curDate))
132 $(
this).css({
133 "background" : "#FED"
,
134 "color" : "black"
135 });
136 });
137 });
138 }
139
140 document.onclick =
function() {
141 var ev = window.event ||
event;
142 var $obj = $(ev.target ||
ev.srcElement);
143 if (!$obj.is('.date-check'
)) {
144 if (flag0 == 1
)
145 $date_list0.css("display", "none"
);
146 if (flag1 == 1
)
147 $date_list1.css("display", "none"
);
148 }
149 }
150 $date_list0.hover(
function() {
151 flag0 = 0
;
152 },
function() {
153 flag0 = 1
;
154 });
155 $date_list1.hover(
function() {
156 flag1 = 0
;
157 },
function() {
158 flag1 = 1
;
159 });
160
161 $(".date-check").each(
function(i, obj) {
162 $(
this).attr("readonly", "readonly"
);
163 var $date_list = i == 0 ?
$date_list0 : $date_list1,
164 $y = i == 0 ?
$y0 : $y1,
165 $m = i == 0 ?
$m0 : $m1;
166 if ($(
this).val() == '' || $(
this).val() ==
today_str) {
167 $y.val(today_year);
168 $m.val(today_month);
169 updateDateTds($date_list, today_year, today_month, '', '', ''
);
170 }
else {
171 var select_year = $(
this).val().substring(0, 4
),
172 select_month = $(
this).val().substring(5, 7
),
173 select_date = $(
this).val().substring(8
);
174 if (select_month.charAt(0) == '0'
)
175 select_month = select_month.substring(1
);
176 if (select_date.charAt(0) == '0'
)
177 select_date = select_date.substring(1
);
178
179 $y.val(select_year);
180 $m.val(select_month);
181 updateDateTds($date_list, select_year, select_month, select_year, select_month, select_date);
182 }
183
184 $(
this).on("focus",
function() {
185 // 显示前重新获取当前日期,解决跨日问题
186 today =
new Date();
187 today_year = today.getFullYear() + ""
;
188 today_month = (today.getMonth() + 1) + ""
;
189 today_date = today.getDate() + ""
;
190 today_str = today_year + "-" + zero(today_month) + "-" +
zero(today_date);
191
192 if ($(
this).val() != ''
) {
193 var select_year = $(
this).val().substring(0, 4
),
194 select_month = $(
this).val().substring(5, 7
),
195 select_date = $(
this).val().substring(8
);
196 if (select_month.charAt(0) == '0'
)
197 select_month = select_month.substring(1
);
198 if (select_date.charAt(0) == '0'
)
199 select_date = select_date.substring(1
);
200
201 if (select_year != $y.val() || select_month !=
$m.val()) {
202 $y.val(select_year);
203 $m.val(select_month);
204 updateDateTds($date_list, select_year, select_month, select_year, select_month, select_date);
205 }
206 }
else if (today_year != $y.val() || today_month !=
$m.val()) {
207 $y.val(today_year);
208 $m.val(today_month);
209 updateDateTds($date_list, today_year, today_month, '', '', ''
);
210 }
211 if (i == 0
) {
212 $date_list0.css("display", "block"
);
213 $date_list1.css("display", "none"
);
214 }
else {
215 $date_list1.css("display", "block"
);
216 $date_list0.css("display", "none"
);
217 }
218 });
219 $(
this).on("blur",
function() {
220 if (i == 0 && flag0 == 1
)
221 $date_list0.css("display", "none"
);
222 else if (i == 1 && flag1 == 1
)
223 $date_list1.css("display", "none"
);
224 })
225 });
226
227 $(".header-left").each(
function(i, obj) {
228 $(
this).on("click",
function() {
229 var $y = i == 0 ?
$y0 : $y1,
230 $m = i == 0 ?
$m0 : $m1;
231 var year =
parseInt($y.val());
232 var mon =
parseInt($m.val());
233 if (mon >= 2
)
234 mon -= 1;
else {
235 year -= 1
;
236 mon = 12
;
237 $y.val(year)
238 }
239 $m.val(mon);
240 var $date_list = i == 0 ?
$date_list0 : $date_list1,
241 $date_check = i == 0 ?
$date_check0 : $date_check1;
242 if ($date_check.val() == ''
)
243 updateDateTds($date_list, year, mon, '', '', '');
else {
244 var select_year = $date_check.val().substring(0, 4
),
245 select_month = $date_check.val().substring(5, 7
),
246 select_date = $date_check.val().substring(8
);
247 if (select_month.charAt(0) == '0'
)
248 select_month = select_month.substring(1
);
249 if (select_date.charAt(0) == '0'
)
250 select_date = select_date.substring(1
);
251 updateDateTds($date_list, year, mon, select_year, select_month, select_date);
252 }
253 })
254 });
255 $(".header-right").each(
function(i, obj) {
256 $(
this).on("click",
function() {
257 var $y = i == 0 ?
$y0 : $y1,
258 $m = i == 0 ?
$m0 : $m1;
259 var year =
parseInt($y.val());
260 var mon =
parseInt($m.val());
261 if (mon < 12
)
262 mon += 1;
else {
263 year += 1
;
264 mon = 1
;
265 $y.val(year)
266 }
267 $m.val(mon);
268 var $date_list = i == 0 ?
$date_list0 : $date_list1,
269 $date_check = i == 0 ?
$date_check0 : $date_check1;
270 if ($date_check.val() == ''
)
271 updateDateTds($date_list, year, mon, '', '', '');
else {
272 var select_year = $date_check.val().substring(0, 4
),
273 select_month = $date_check.val().substring(5, 7
),
274 select_date = $date_check.val().substring(8
);
275 if (select_month.charAt(0) == '0'
)
276 select_month = select_month.substring(1
);
277 if (select_date.charAt(0) == '0'
)
278 select_date = select_date.substring(1
);
279 updateDateTds($date_list, year, mon, select_year, select_month, select_date);
280 }
281 })
282 });
283 $(".header select").each(
function(j, obj) {
284 $(
this).on("change",
function() {
285 var i = j < 2 ? 0 : 1
;
286 if (i == 0
)
287 flag0 = 0
;
288 else
289 flag1 = 0
;
290
291 var $date_check = i == 0 ?
$date_check0 : $date_check1,
292 $date_list = i == 0 ?
$date_list0 : $date_list1,
293 $y = i == 0 ?
$y0 : $y1,
294 $m = i == 0 ?
$m0 : $m1;
295 if ($date_check.val() == ''
)
296 updateDateTds($date_list, $y.val(), $m.val(), '', '', '');
else {
297 var select_year = $date_check.val().substring(0, 4
),
298 select_month = $date_check.val().substring(5, 7
),
299 select_date = $date_check.val().substring(8
);
300 if (select_month.charAt(0) == '0'
)
301 select_month = select_month.substring(1
);
302 if (select_date.charAt(0) == '0'
)
303 select_date = select_date.substring(1
);
304 updateDateTds($date_list, $y.val(), $m.val(), select_year, select_month, select_date);
305 }
306 })
307 });
308 $(".today").each(
function(i, obj) {
309 $(
this).on("click",
function() {
310 var $date_check = i == 0 ?
$date_check0 : $date_check1,
311 $date_list = i == 0 ?
$date_list0 : $date_list1;
312 $date_list.css("display", "none"
);
313 var select_str =
$date_check.val();
314 if (today_str !=
select_str) {
315 if ('' !=
select_str) {
316 var select_year = select_str.substring(0, 4
),
317 select_month = select_str.substring(5, 7
),
318 select_date = select_str.substring(8
);
319 if (select_month.charAt(0) == '0'
)
320 select_month = select_month.substring(1
);
321 if (select_date.charAt(0) == '0'
)
322 select_date = select_date.substring(1
);
323
324 if (select_year == today_year && select_month ==
today_month) {
325 $date_list.find("td").each(
function() {
326 if ($(
this).html() ==
select_date) {
327 clearTDcss_($(
this));
328 return false;
329 }
330 });
331 }
332 }
333
334 $date_check.val(today_str);
335 check();
336 }
337 })
338 });
339 //点击清空则把日期清空
340 $(".cls").each(
function(i, obj) {
341 $(
this).on("click",
function() {
342 var $date_check = i == 0 ?
$date_check0 : $date_check1,
343 $date_list = i == 0 ?
$date_list0 : $date_list1;
344 $date_list.css("display", "none"
);
345 var select_str =
$date_check.val();
346 if ('' !=
select_str) {
347 var select_year = select_str.substring(0, 4
),
348 select_month = select_str.substring(5, 7
),
349 select_date = select_str.substring(8
);
350 if (select_month.charAt(0) == '0'
)
351 select_month = select_month.substring(1
);
352 if (select_date.charAt(0) == '0'
)
353 select_date = select_date.substring(1
);
354
355 if (select_year == today_year && select_month ==
today_month) {
356 $date_list.find("td").each(
function() {
357 if ($(
this).html() ==
select_date) {
358 clearTDcss_($(
this));
359 return false;
360 }
361 });
362 }
363
364 $date_check.val(''
);
365 check();
366 }
367 })
368 });
369 $(".date td").on("click",
function() {
370 if ($(
this).html() == ""
)
371 return;
372
373 var d0 = $(
this).parents(".date").is('.date0'
);
374 var $date_check = d0 ?
$date_check0 : $date_check1,
375 $date_list = d0 ?
$date_list0 : $date_list1,
376 $y = d0 ?
$y0 : $y1,
377 $m = d0 ?
$m0 : $m1;
378 $date_list.css("display", "none"
);
379 var str = $y.val() + "-" + zero($m.val()) + "-" + zero($(
this).html());
380 var select_str =
$date_check.val();
381 if (str !=
select_str) {
382 if (select_str == ''
) {
383 if (str !=
today_str)
384 setTDcss($(
this), "current"
);
385 }
else {
386 var select_year = select_str.substring(0, 4
),
387 select_month = select_str.substring(5, 7
),
388 select_date = select_str.substring(8
);
389 if (select_month.charAt(0) == '0'
)
390 select_month = select_month.substring(1
);
391 if (select_date.charAt(0) == '0'
)
392 select_date = select_date.substring(1
);
393
394 var cur_year = str.substring(0, 4
),
395 cur_month = str.substring(5, 7
),
396 cur_date = str.substring(8
);
397 if (cur_month.charAt(0) == '0'
)
398 cur_month = cur_month.substring(1
);
399 if (cur_date.charAt(0) == '0'
)
400 cur_date = cur_date.substring(1
);
401
402 if (select_year != cur_year || select_month != cur_month) {
// 不同框,不用清除以前的选择TD样式
403 if (str !=
today_str)
404 setTDcss($(
this), "current"
);
405 }
else {
406 var k = 0
;
407 $date_list.find("td").each(
function() {
408 if ($(
this).html() != ''
) {
409 if ($(
this).html() ==
select_date) {
410 if (select_str !=
today_str)
411 clearTDcss_($(
this));
412 if (++k == 2
)
413 return false;
414 }
else if ($(
this).html() ==
cur_date) {
415 if (str !=
today_str) {
416 $(
this).unbind("mouseenter").unbind("mouseleave"
);
417 setTDcss($(
this), "current"
);
418 }
419 if (++k == 2
)
420 return false;
421 }
422 }
423 });
424 }
425 }
426
427 $date_check.val(str);
428
429 check();
430
431 }
432 });
433
434
435 document.body.onselectstart = document.body.ondrag =
function() {
436 return false;
437 }
438 })
1 double-date.css代码
2
3 * {
4 margin:
0;
5 padding:
0;
6 box-sizing:
border-box;
7 }
8
9 .date {
10 position:
relative;
11 display:
inline;
12 }
13
14 /* .date0 {
15
16 } */
17
18 .date-check{
19 width:
150px;
20 height:
20px;
21 /* line-height:30px; */
22 border:
1px solid #ccc;
23 /* padding: 0 5px; */
24 }
25
26 .dateTable {
27 border-collapse:
collapse;
28 /* table-layout: fixed; */
29 }
30
31 .clearfix {
32 zoom:
1;
33 }
34 .clearfix:after {
35 content:
".";
36 display:
block;
37 width:
0;
38 height:
0;
39 visibility:
hidden;
40 clear:
both;
41 }
42
43 .fl {
44 float:
left;
45 }
46
47 .fr {
48 float:
right;
49 }
50
51 .date-list {
52 display:
none;
53 position:
absolute;
54 top:
16px !important;
55 *top:
11px;
56 _top:
23px;
57 left:
0;
58 padding-top:
6px;
59 background:
#FED;
60 border-radius:
5px;
61 -webkit-border-radius:
5px;
62 overflow:
hidden;
63 border:
1px solid;
64 border-color:
#ccc #ccc transparent #ccc;
65 /* z-index: 999; */
66 }
67
68 .header {
69 margin-bottom:
4px;
70 padding:
0 5px;
71 }
72
73 .header .fl {
74 margin-right:
5px;
75 }
76
77 .header .fl, .header .fr {
78 cursor:
pointer;
79 }
80
81 .header select {
82 vertical-align:
top;
83 }
84
85 .header-left, .header-right {
86 border-radius:
50%;
87 width:
20px;
88 height:
20px;
89 text-align:
center;
90 vertical-align:
middle;
91 padding:
2px 0px 0px 2px;
92 border:
1px solid #ccc;
93 }
94
95 .today, .cls {
96 padding:
2px 5px;
97 border:
1px solid #ccc;
98 border-radius:
5px;
99 background:
#ccc;
100 color:
#fff;
101 font-size:
12px;
102 width:
36px;
103 }
104
105 .date-list, .date-list table {
106 width:
260px;
107 }
108
109 .date-list thead {
110 background:
#00cdec;
111 }
112
113 .date-list th {
114 padding:
2px;
115 color:
#fff;
116 border:
1px solid #ccc;
117 font-size:
14px;
118 font-weight:
normal;
119 }
120
121 .date-list td {
122 border:
1px solid #ccc;
123 padding:
2px 0;
124 text-align:
center;
125 font-size:
12px;
126 }
127
128 .date-list td.now {
129 background:
#00cdec;
130 color:
#fff;
131 }
132
133 .date-list td.current {
134 background:
#66ff00;
135 color:
#fff;
136 }
137
138 .date-error .date-check {
139 border:
1px solid red;
140 }
1 jsp代码
2
3 <script type="text/javascript" src="<c:url value="/js/
double-date.js"/>"></script>
4
5 <link rel="StyleSheet" href="<c:url value="/styles/
double-date.css"/>"
6 type="text/css" />
7
8 .imgButtonDefault {
9 border: 1px solid #EBF2EB;
10 }
11
12 .imgButtonDown {
13 border-
top: 1px solid #CACAFF;
14 border-
left: 1px solid #CACAFF;
15 border-
right: 1px solid #FFFFFF;
16 border-
bottom: 1px solid #FFFFFF;
17 cursor: hand;
18 }
19
20 .imgButtonOver {
21 border-
top: 1px solid #FFFFFF;
22 border-
left: 1px solid #FFFFFF;
23 border-
right: 1px solid #CACAFF;
24 border-
bottom: 1px solid #CACAFF;
25 cursor: hand;
26 }
27
28 $(function() {
29 $(".imgButtonDefault"
).each(function(i, obj) {
30 $(
this).bind(
31 {
32 mouseover : function() {
33 this.className = "imgButtonOver"
;
34 },
35 mouseout : function() {
36 this.className = "imgButtonDefault"
;
37 },
38 mousedown : function() {
39 this.className = "imgButtonDown"
;
40 },
41 mouseup : function() {
42 this.className = "imgButtonOver"
;
43 },
44 click : function() {
45 query(i);
46 }
47 });
48 });
49
50 <span> 邮寄起始日期:</span>
51 <div
class="date date0" maxDateSpan=7>
52 <input id="from1" type="text"
53 value="<fmt:formatDate value='${requestScope.beginTime}' pattern='yyyy-MM-dd'/>"
54 class="date-check" />
55 </div>
56 <span> 邮寄截止日期:</span>
57 <div
class="date">
58 <input id="to1" type="text"
59 value="<fmt:formatDate value='${requestScope.endTime}' pattern='yyyy-MM-dd'/>"
60 class="date-check" />
61 </div>
转载于:https://www.cnblogs.com/jinhuan/p/6812146.html