`

最强的日历控件

 
阅读更多
1、引用 WebCalendar.js <script src="WebCalendar.js" type="text/javascript"></script> 2、编写触发的脚本事件 this.Txt_Date.Attributes["onclick"] = "SelectDate(this,'yyyy-MM-dd')"; <input name="Txt_Date" type="text" maxlength="10" id="Txt_Date" onclick="SelectDate(this,'yyyy/MM/dd')" /> 3、以下为WebCalendar.js <!-- var cal; var isFocus=false; //是否为焦点 //以上为 添加的变量 //选择日期 function SelectDate(obj,strFormat) { var date = new Date(); var by = date.getFullYear()-50; //最小值 → 50 年前 var ey = date.getFullYear()+50; //最大值 → 50 年后 //cal = new Calendar(by, ey,1,strFormat); //初始化英文版,0 为中文版 cal = (cal==null) ? new Calendar(by, ey, 0) : cal; //不用每次都初始化 2006-12-03 修正 cal.dateFormatStyle = strFormat; cal.show(obj); } /**//**//**//** * 返回日期 修改为根据用户指定的 style 来确定; */ //String.prototype.toDate = function(x, p) { String.prototype.toDate = function(style) { /**//**//**//* if(x == null) x = "-"; if(p == null) p = "ymd"; var a = this.split(x); var y = parseInt(a[p.indexOf("y")]); //remember to change this next century ;) if(y.toString().length <= 2) y += 2000; if(isNaN(y)) y = new Date().getFullYear(); var m = parseInt(a[p.indexOf("m")]) - 1; var d = parseInt(a[p.indexOf("d")]); if(isNaN(d)) d = 1; return new Date(y, m, d); */ var y = this.substring(style.indexOf('y'),style.lastIndexOf('y')+1);//年 var m = this.substring(style.indexOf('M'),style.lastIndexOf('M')+1);//月 var d = this.substring(style.indexOf('d'),style.lastIndexOf('d')+1);//日 if(isNaN(y)) y = new Date().getFullYear(); if(isNaN(m)) m = new Date().getMonth(); if(isNaN(d)) d = new Date().getDate(); var dt ; eval ("dt = new Date('"+ y+"', '"+(m-1)+"','"+ d +"')"); return dt; } /**//**//**//** * 格式化日期 */ Date.prototype.format = function(style) { var o = { "M+" : this.getMonth() + 1, //month "d+" : this.getDate(), //day "h+" : this.getHours(), //hour "m+" : this.getMinutes(), //minute "s+" : this.getSeconds(), //second "w+" : "天一二三四五六".charAt(this.getDay()), //week "q+" : Math.floor((this.getMonth() + 3) / 3), //quarter "S" : this.getMilliseconds() //millisecond } if(/(y+)/.test(style)) { style = style.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length)); } for(var k in o){ if(new RegExp("("+ k +")").test(style)){ style = style.replace(RegExp.$1, RegExp.$1.length == 1 ? o[k] : ("00" + o[k]).substr(("" + o[k]).length)); } } return style; }; /**//**//**//** * 日历类 * @param beginYear 1990 * @param endYear 2010 * @param lang 0(中文)|1(英语) 可自由扩充 * @update */ function Calendar(beginYear, endYear, lang, dateFormatStyle) { this.beginYear = 1990; this.endYear = 2010; this.lang = 0; //0(中文) | 1(英文) this.dateFormatStyle = "yyyy-MM-dd"; if (beginYear != null && endYear != null){ this.beginYear = beginYear; this.endYear = endYear; } if (lang != null){ this.lang = lang } if (dateFormatStyle != null){ this.dateFormatStyle = dateFormatStyle } this.dateControl = null; this.panel = this.getElementById("calendarPanel"); this.container = this.getElementById("ContainerPanel"); this.form = null; this.date = new Date(); this.year = this.date.getFullYear(); this.month = this.date.getMonth(); this.colors = { "cur_word" : "#FFFFFF", //当日日期文字颜色 "cur_bg" : "#00FF00", //当日日期单元格背影色 "sel_bg" : "#FFCCCC", //已被选择的日期单元格背影色 2006-12-03 寒羽枫添加 "sun_word" : "#FF0000", //星期天文字颜色 "sat_word" : "#0000FF", //星期六文字颜色 "td_word_light" : "#333333", //单元格文字颜色 "td_word_dark" : "#CCCCCC", //单元格文字暗色 "td_bg_out" : "#EFEFEF", //单元格背影色 "td_bg_over" : "#FFCC00", //单元格背影色 "tr_word" : "#FFFFFF", //日历头文字颜色 "tr_bg" : "#666666", //日历头背影色 "input_border" : "#CCCCCC", //input控件的边框颜色 "input_bg" : "#EFEFEF" //input控件的背影色 } this.draw(); this.bindYear(); this.bindMonth(); this.changeSelect(); this.bindData(); } /**//**//**//** * 日历类属性(语言包,可自由扩展) */ Calendar.language = { "year" : [[""], [""]], "months" : [["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"], ["JAN","FEB","MAR","APR","MAY","JUN","JUL","AUG","SEP","OCT","NOV","DEC"] ], "weeks" : [["日","一","二","三","四","五","六"], ["SUN","MON","TUR","WED","THU","FRI","SAT"] ], "clear" : [["清空"], ["CLS"]], "today" : [["今天"], ["TODAY"]], "close" : [["关闭"], ["CLOSE"]] } Calendar.prototype.draw = function() { calendar = this; var mvAry = []; //mvAry[mvAry.length] = ' <form name="calendarForm" style="margin: 0px;">'; //因 <form> 不能嵌套, 改用 Div mvAry[mvAry.length] = ' <div name="calendarForm" style="margin: 0px;">'; mvAry[mvAry.length] = ' <table width="100%" border="0" cellpadding="0" cellspacing="1">'; mvAry[mvAry.length] = ' <tr>'; mvAry[mvAry.length] = ' <th align="left" width="1%"><input style="border: 1px solid ' + calendar.colors["input_border"] + ';background-color:' + calendar.colors["input_bg"] + ';width:16px;height:20px;" name="prevMonth" type="button" id="prevMonth" value="&lt;" /></th>'; mvAry[mvAry.length] = ' <th align="center" width="98%" nowrap="nowrap"><select name="calendarYear" id="calendarYear" style="font-size:12px;"></select><select name="calendarMonth" id="calendarMonth" style="font-size:12px;"></select></th>'; mvAry[mvAry.length] = ' <th align="right" width="1%"><input style="border: 1px solid ' + calendar.colors["input_border"] + ';background-color:' + calendar.colors["input_bg"] + ';width:16px;height:20px;" name="nextMonth" type="button" id="nextMonth" value="&gt;" /></th>'; mvAry[mvAry.length] = ' </tr>'; mvAry[mvAry.length] = ' </table>'; mvAry[mvAry.length] = ' <table id="calendarTable" width="100%" style="border:0px solid #CCCCCC;background-color:#FFFFFF" border="0" cellpadding="3" cellspacing="1">'; mvAry[mvAry.length] = ' <tr>'; for(var i = 0; i < 7; i++) { mvAry[mvAry.length] = ' <th style="font-weight:normal;background-color:' + calendar.colors["tr_bg"] + ';color:' + calendar.colors["tr_word"] + ';">' + Calendar.language["weeks"][this.lang][i] + '</th>'; } mvAry[mvAry.length] = ' </tr>'; for(var i = 0; i < 6;i++){ mvAry[mvAry.length] = ' <tr align="center">'; for(var j = 0; j < 7; j++) { if (j == 0){ mvAry[mvAry.length] = ' <td style="cursor:default;color:' + calendar.colors["sun_word"] + ';"></td>'; } else if(j == 6) { mvAry[mvAry.length] = ' <td style="cursor:default;color:' + calendar.colors["sat_word"] + ';"></td>'; } else { mvAry[mvAry.length] = ' <td style="cursor:default;"></td>'; } } mvAry[mvAry.length] = ' </tr>'; } mvAry[mvAry.length] = ' <tr style="background-color:' + calendar.colors["input_bg"] + ';">'; mvAry[mvAry.length] = ' <th colspan="2"><input name="calendarClear" type="button" id="calendarClear" value="' + Calendar.language["clear"][this.lang] + '" style="border: 1px solid ' + calendar.colors["input_border"] + ';background-color:' + calendar.colors["input_bg"] + ';width:100%;height:20px;font-size:12px;"/></th>'; mvAry[mvAry.length] = ' <th colspan="3"><input name="calendarToday" type="button" id="calendarToday" value="' + Calendar.language["today"][this.lang] + '" style="border: 1px solid ' + calendar.colors["input_border"] + ';background-color:' + calendar.colors["input_bg"] + ';width:100%;height:20px;font-size:12px;"/></th>'; mvAry[mvAry.length] = ' <th colspan="2"><input name="calendarClose" type="button" id="calendarClose" value="' + Calendar.language["close"][this.lang] + '" style="border: 1px solid ' + calendar.colors["input_border"] + ';background-color:' + calendar.colors["input_bg"] + ';width:100%;height:20px;font-size:12px;"/></th>'; mvAry[mvAry.length] = ' </tr>'; mvAry[mvAry.length] = ' </table>'; //mvAry[mvAry.length] = ' </from>'; mvAry[mvAry.length] = ' </div>'; this.panel.innerHTML = mvAry.join(""); /**//******** 以下代码由寒羽枫 2006-12-01 添加 **********/ var obj = this.getElementById("prevMonth"); obj.onclick = function () {calendar.goPrevMonth(calendar);} obj.onblur = function () {calendar.onblur();} this.prevMonth= obj; obj = this.getElementById("nextMonth"); obj.onclick = function () {calendar.goNextMonth(calendar);} obj.onblur = function () {calendar.onblur();} this.nextMonth= obj; obj = this.getElementById("calendarClear"); obj.onclick = function () {calendar.dateControl.value = "";calendar.hide();} this.calendarClear = obj; obj = this.getElementById("calendarClose"); obj.onclick = function () {calendar.hide();} this.calendarClose = obj; obj = this.getElementById("calendarYear"); obj.onchange = function () {calendar.update(calendar);} obj.onblur = function () {calendar.onblur();} this.calendarYear = obj; obj = this.getElementById("calendarMonth"); with(obj) { onchange = function () {calendar.update(calendar);} onblur = function () {calendar.onblur();} }this.calendarMonth = obj; obj = this.getElementById("calendarToday"); obj.onclick = function () { var today = new Date(); calendar.date = today; calendar.year = today.getFullYear(); calendar.month = today.getMonth(); calendar.changeSelect(); calendar.bindData(); calendar.dateControl.value = today.format(calendar.dateFormatStyle); calendar.hide(); } this.calendarToday = obj; /**//******** 以上代码由寒羽枫 2006-12-01 添加 **********/ /**//* //this.form = document.forms["calendarForm"]; this.form.prevMonth.onclick = function () {calendar.goPrevMonth(this);} this.form.nextMonth.onclick = function () {calendar.goNextMonth(this);} this.form.prevMonth.onblur = function () {calendar.onblur();} this.form.nextMonth.onblur = function () {calendar.onblur();} this.form.calendarClear.onclick = function () {calendar.dateControl.value = "";calendar.hide();} this.form.calendarClose.onclick = function () {calendar.hide();} this.form.calendarYear.onchange = function () {calendar.update(this);} this.form.calendarMonth.onchange = function () {calendar.update(this);} this.form.calendarYear.onblur = function () {calendar.onblur();} this.form.calendarMonth.onblur = function () {calendar.onblur();} this.form.calendarToday.onclick = function () { var today = new Date(); calendar.date = today; calendar.year = today.getFullYear(); calendar.month = today.getMonth(); calendar.changeSelect(); calendar.bindData(); calendar.dateControl.value = today.format(calendar.dateFormatStyle); calendar.hide(); } */ } //年份下拉框绑定数据 Calendar.prototype.bindYear = function() { //var cy = this.form.calendarYear; var cy = this.calendarYear;//2006-12-01 由寒羽枫修改 cy.length = 0; for (var i = this.beginYear; i <= this.endYear; i++){ cy.options[cy.length] = new Option(i + Calendar.language["year"][this.lang], i); } } //月份下拉框绑定数据 Calendar.prototype.bindMonth = function() { //var cm = this.form.calendarMonth; var cm = this.calendarMonth;//2006-12-01 由寒羽枫修改 cm.length = 0; for (var i = 0; i < 12; i++){ cm.options[cm.length] = new Option(Calendar.language["months"][this.lang][i], i); } } //向前一月 Calendar.prototype.goPrevMonth = function(e){ if (this.year == this.beginYear && this.month == 0){return;} this.month--; if (this.month == -1) { this.year--; this.month = 11; } this.date = new Date(this.year, this.month, 1); this.changeSelect(); this.bindData(); } //向后一月 Calendar.prototype.goNextMonth = function(e){ if (this.year == this.endYear && this.month == 11){return;} this.month++; if (this.month == 12) { this.year++; this.month = 0; } this.date = new Date(this.year, this.month, 1); this.changeSelect(); this.bindData(); } //改变SELECT选中状态 Calendar.prototype.changeSelect = function() { //var cy = this.form.calendarYear; //var cm = this.form.calendarMonth; var cy = this.calendarYear;//2006-12-01 由寒羽枫修改 var cm = this.calendarMonth; for (var i= 0; i < cy.length; i++){ if (cy.options[i].value == this.date.getFullYear()){ cy[i].selected = true; break; } } for (var i= 0; i < cm.length; i++){ if (cm.options[i].value == this.date.getMonth()){ cm[i].selected = true; break; } } } //更新年、月 Calendar.prototype.update = function (e){ //this.year = e.form.calendarYear.options[e.form.calendarYear.selectedIndex].value; //this.month = e.form.calendarMonth.options[e.form.calendarMonth.selectedIndex].value; this.year = e.calendarYear.options[e.calendarYear.selectedIndex].value;//2006-12-01 由寒羽枫修改 this.month = e.calendarMonth.options[e.calendarMonth.selectedIndex].value; this.date = new Date(this.year, this.month, 1); this.changeSelect(); this.bindData(); } //绑定数据到月视图 Calendar.prototype.bindData = function () { var calendar = this; var dateArray = this.getMonthViewArray(this.date.getYear(), this.date.getMonth()); var tds = this.getElementById("calendarTable").getElementsByTagName("td"); for(var i = 0; i < tds.length; i++) { //tds[i].style.color = calendar.colors["td_word_light"]; tds[i].style.backgroundColor = calendar.colors["td_bg_out"]; tds[i].onclick = function () {return;} tds[i].onmouseover = function () {return;} tds[i].onmouseout = function () {return;} if (i > dateArray.length - 1) break; tds[i].innerHTML = dateArray[i]; if (dateArray[i] != "&nbsp;"){ tds[i].onclick = function () { if (calendar.dateControl != null){ calendar.dateControl.value = new Date(calendar.date.getFullYear(), calendar.date.getMonth(), this.innerHTML).format(calendar.dateFormatStyle); } calendar.hide(); } tds[i].onmouseover = function () { this.style.backgroundColor = calendar.colors["td_bg_over"]; } tds[i].onmouseout = function () { this.style.backgroundColor = calendar.colors["td_bg_out"]; } if (new Date().format(calendar.dateFormatStyle) == new Date(calendar.date.getFullYear(), calendar.date.getMonth(), dateArray[i]).format(calendar.dateFormatStyle)) { //tds[i].style.color = calendar.colors["cur_word"]; tds[i].style.backgroundColor = calendar.colors["cur_bg"]; tds[i].onmouseover = function () { this.style.backgroundColor = calendar.colors["td_bg_over"]; } tds[i].onmouseout = function () { this.style.backgroundColor = calendar.colors["cur_bg"]; } //continue; //若不想当天单元格的背景被下面的覆盖,请取消注释 → 2006-12-03 寒羽枫添加 }//end if //设置已被选择的日期单元格背影色 2006-12-03 寒羽枫添加 if (calendar.dateControl != null && calendar.dateControl.value == new Date(calendar.date.getFullYear(), calendar.date.getMonth(), dateArray[i]).format(calendar.dateFormatStyle)) { tds[i].style.backgroundColor = calendar.colors["sel_bg"]; tds[i].onmouseover = function () { this.style.backgroundColor = calendar.colors["td_bg_over"]; } tds[i].onmouseout = function () { this.style.backgroundColor = calendar.colors["sel_bg"]; } } } } } //根据年、月得到月视图数据(数组形式) Calendar.prototype.getMonthViewArray = function (y, m) { var mvArray = []; var dayOfFirstDay = new Date(y, m, 1).getDay(); var daysOfMonth = new Date(y, m + 1, 0).getDate(); for (var i = 0; i < 42; i++) { mvArray[i] = "&nbsp;"; } for (var i = 0; i < daysOfMonth; i++){ mvArray[i + dayOfFirstDay] = i + 1; } return mvArray; } //扩展 document.getElementById(id) 多浏览器兼容性 from meizz tree source Calendar.prototype.getElementById = function(id){ if (typeof(id) != "string" || id == "") return null; if (document.getElementById) return document.getElementById(id); if (document.all) return document.all(id); try {return eval(id);} catch(e){ return null;} } //扩展 object.getElementsByTagName(tagName) Calendar.prototype.getElementsByTagName = function(object, tagName){ if (document.getElementsByTagName) return document.getElementsByTagName(tagName); if (document.all) return document.all.tags(tagName); } //取得HTML控件绝对位置 Calendar.prototype.getAbsPoint = function (e){ var x = e.offsetLeft; var y = e.offsetTop; while(e = e.offsetParent){ x += e.offsetLeft; y += e.offsetTop; } return {"x": x, "y": y}; } //显示日历 Calendar.prototype.show = function (dateObj, popControl) { if (dateObj == null){ throw new Error("arguments[0] is necessary") } this.dateControl = dateObj; //if (dateObj.value.length > 0){ //this.date = new Date(dateObj.value.toDate()); //this.date = new Date(dateObj.value.toDate(this.dateFormatStyle));//由寒羽枫修改,带入用户指定的 style this.date = (dateObj.value.length > 0) ? new Date(dateObj.value.toDate(this.dateFormatStyle)) : new Date() ;//2006-12-03 寒羽枫添加 → 若为空则显示当前月份 this.year = this.date.getFullYear(); this.month = this.date.getMonth(); this.changeSelect(); this.bindData(); //} if (popControl == null){ popControl = dateObj; } var xy = this.getAbsPoint(popControl); this.panel.style.left = xy.x -25 + "px"; this.panel.style.top = (xy.y + dateObj.offsetHeight) + "px"; //由寒羽枫 2006-06-25 修改 → 把 visibility 变为 display,并添加失去焦点的事件 //this.setDisplayStyle("select", "hidden"); //this.panel.style.visibility = "visible"; //this.container.style.visibility = "visible"; this.panel.style.display = ""; this.container.style.display = ""; dateObj.onblur = function(){calendar.onblur();} this.container.onmouseover = function(){isFocus=true;} this.container.onmouseout = function(){isFocus=false;} } //隐藏日历 Calendar.prototype.hide = function() { //this.setDisplayStyle("select", "visible"); //this.panel.style.visibility = "hidden"; //this.container.style.visibility = "hidden"; this.panel.style.display = "none"; this.container.style.display = "none"; isFocus=false; } //焦点转移时隐藏日历 → 由寒羽枫 2006-06-25 添加 Calendar.prototype.onblur = function() { if(!isFocus){this.hide();} } //以下由寒羽枫 2006-06-25 修改 → 用<iframe> 遮住 IE 的下拉框 /**//**//**//* //设置控件显示或隐藏 Calendar.prototype.setDisplayStyle = function(tagName, style) { var tags = this.getElementsByTagName(null, tagName) for(var i = 0; i < tags.length; i++) { if (tagName.toLowerCase() == "select" && (tags[i].name == "calendarYear" || tags[i].name == "calendarMonth")){ continue; } //tags[i].style.visibility = style; tags[i].style.display = style; } } */ //document.write('<div id="ContainerPanel" style="visibility:hidden"><div id="calendarPanel" style="position: absolute;visibility: hidden;z-index: 9999;'); document.write('<div id="ContainerPanel" style="display:none"><div id="calendarPanel" style="position: absolute;display: none;z-index: 9999;'); document.write('background-color: #FFFFFF;border: 1px solid #CCCCCC;width:175px;font-size:12px;"></div>'); if(document.all) { document.write('<iframe style="position:absolute;z-index:2000;width:expression(this.previousSibling.offsetWidth);'); document.write('height:expression(this.previousSibling.offsetHeight);'); document.write('left:expression(this.previousSibling.offsetLeft);top:expression(this.previousSibling.offsetTop);'); document.write('display:expression(this.previousSibling.style.display);" scrolling="no" frameborder="no"></iframe>'); } document.write('</div>'); //var calendar = new Calendar(); //此句被 寒羽枫注释,否则 IE 将报错 //调用calendar.show(dateControl, popControl); //-->
分享到:
评论

相关推荐

    js日历控件js日历控件

    js日历控件js日历控件js日历控件js日历控件js日历控件js日历控件js日历控件js日历控件js日历控件js日历控件

    日历控件.rar 日历控件.rar

    日历控件 日历控件 日历控件日历控件 日历控件 日历控件日历控件 日历控件 日历控件日历控件 日历控件 日历控件日历控件 日历控件 日历控件日历控件 日历控件 日历控件日历控件 日历控件 日历控件

    js日历控件[超酷超漂亮]

    js日历控件[超酷超漂亮]js日历控件[超酷超漂亮]js日历控件[超酷超漂亮]js日历控件[超酷超漂亮]js日历控件[超酷超漂亮]js日历控件[超酷超漂亮]js日历控件[超酷超漂亮]js日历控件[超酷超漂亮]js日历控件[超酷超漂亮]js...

    VBA EXCEL制作日历控件

    在EXCEL中,可以通过双击单元格,调出日历控件,通过对日历控件的操作,将所选日期更新到单元格中,该控件代码完全开放免费,供大家学习和使用,感兴趣的同学可以多多关注www.allmlp.com,让我们共同成长共同学习。

    6个JS日历控件个JS日历控件

    个JS日历控件个JS日历控件个JS日历控件个JS日历控件个JS日历控件个JS日历控件个JS日历控件个JS日历控件个JS日历控件个JS日历控件个JS日历控件个JS日历控件

    Qt 自定义 Calendar 日历控件

    Qt 自定义 Calendar 日历 控件 方便控制 及实现样式表

    很好用的日历控件,日历、控件

    很好用的日历控件,日历、控件很好用的日历控件,日历、控件很好用的日历控件,日历、控件很好用的日历控件,日历、控件

    提供excel 日历控件9.0下载(工具必须的插件)

    有的office版本自带了日历控件,可有的版本却没有,如果你的office有日历控件,不必安装。

    强大的日历控件

    强大的日历控件

    日历控件大全 - 日历控件

    各种格式的日历控件,应有尽有!只需要给不同的格式作参数就可以了!美观漂亮!

    MFC日历控件的使用方法

    日历控件的添加在资源列表框内,主要描述了添加完日历控件后消息响应函数里的设置情况

    html js脚本日历控件

    基于javascript脚本的网页日历控件,格式为2013-01-01

    日历控件12

    日历控件:集成到自己的项目中很简单

    简单及使用的JS日历控件

    日历控件 日历控件 日历控件 日历控件 日历控件 日历控件 日历控件 日历控件 日历控件 日历控件 日历控件 日历控件 日历控件 日历控件 日历控件 日历控件 日历控件 日历控件 日历控件 日历控件 日历控件 日历控件 ...

    js日历控件 js日历控件

    js日历控件 js日历控件 js日历控件 js日历控件 js日历控件

    js日历控件优化

    js日历控件优化,含时分秒,年月日,很好用,,js日历控件优化,含时分秒,年月日,很好用,,js日历控件优化,含时分秒,年月日,很好用,,

    组态王应用——日历控件的使用

    组态王应用——日历控件的使用

    日历控件大集合—各式各样的日历控件

    各式各样的日历控件—有人说贵了,所以降低分数了

    java日期日历控件

    java日期日历控件. java日期日历控件. java日期日历控件.

    js 日历控件 calendar

    js 日历控件 calendar,js 日历控件 calendar,js 日历控件 calendar,js 日历控件 calendar,js 日历控件 calendar,js 日历控件 calendar

Global site tag (gtag.js) - Google Analytics