基于Firefox/IE浏览器的日历控件程序是以脚本之家流行的基于IE浏览器的Calendar.js程序为模板,经多人修改完善,现支持多版本浏览器,需要两个文件WebCalendar.js与WebCalendar.html具体代码如下WebCalendar.js/***----------------------------基于IE/Firefox浏览器------------------------------*/varcal;varisFocus=false;//是否为焦点varpickMode={second:1,minute:2,hour:3,day:4,month:5,year:6};vartopY=0,leftX=0;//自定义定位偏移量//选择日期→通过ID来选日期functionSelectDateById(id,strFormat,x,y){varobj=document.getElementById(id);if(obj==null){returnfalse;}obj.focus();if(obj.onclick!=null){obj.onclick();}elseif(obj.click!=null){obj.click();}else{SelectDate(obj,strFormat,x,y)}}//选择日期functionSelectDate(obj,strFormat,x,y){leftX=(x==null)?leftX:x;topY=(y==null)?topY:y;//自定义定位偏移量if(document.getElementById(ContainerPanel)==null){InitContainerPanel();}vardate=newDate();varby=date.getFullYear()-50;//最小值→50年前varey=date.getFullYear()+50;//最大值→50年后//cal=newCalendar(by,ey,1,strFormat);//初始化英文版,0为中文版cal=(cal==null)?newCalendar(by,ey,0):cal;//不用每次都初始化cal.DateMode=pickMode[second];//复位if(strFormat.indexOf('s')0){cal.DateMode=pickMode[minute];}//精度为分if(strFormat.indexOf('m')0){cal.DateMode=pickMode[hour];}//精度为时if(strFormat.indexOf('h')0){cal.DateMode=pickMode[day];}//精度为日if(strFormat.indexOf('d')0){cal.DateMode=pickMode[month];}//精度为月if(strFormat.indexOf('M')0){cal.DateMode=pickMode[year];}//精度为年if(strFormat.indexOf('y')0){cal.DateMode=pickMode[second];}//默认精度为秒cal.dateFormatStyleOld=cal.dateFormatStyle;cal.dateFormatStyle=strFormat;cal.show(obj);}/**//**//**//**//**//**//**//***返回日期*@paramdthedelimiter*@parampthepatternofyourdate根据用户指定的style来确定;*/String.prototype.toDate=function(style){vary=this.substring(style.indexOf('y'),style.lastIndexOf('y')+1);//年varM=this.substring(style.indexOf('M'),style.lastIndexOf('M')+1);//月vard=this.substring(style.indexOf('d'),style.lastIndexOf('d')+1);//日varh=this.substring(style.indexOf('h'),style.lastIndexOf('h')+1);//时varm=this.substring(style.indexOf('m'),style.lastIndexOf('m')+1);//分vars=this.substring(style.indexOf('s'),style.lastIndexOf('s')+1);//秒if(s==null||s==||isNaN(s)){s=newDate().getSeconds();}if(m==null||m==||isNaN(m)){m=newDate().getMinutes();}if(h==null||h==||isNaN(h)){h=newDate().getHours();}if(d==null||d==||isNaN(d)){d=newDate().getDate();}if(M==null||M==||isNaN(M)){M=newDate().getMonth()+1;}if(y==null||y==||isNaN(y)){y=newDate().getFullYear();}vardt;eval(dt=newDate('+y+','+(M-1)+','+d+','+h+','+m+','+s+'));returndt;}/**//**//**//**//**//**//**//***格式化日期*@paramdthedelimiter*@parampthepatternofyourdate*@authormeizz*/Date.prototype.format=function(style){varo={M+:this.getMonth()+1,//monthd+:this.getDate(),//dayh+:this.getHours(),//hourm+:this.getMinutes(),//minutes+:this.getSeconds(),//secondw+:天一二三四五六.charAt(this.getDay()),//weekq+:Math.floor((this.getMonth()+3)/3),//quarterS:this.getMilliseconds()//millisecond}if(/(y+)/.test(style)){style=style.replace(RegExp.$1,(this.getFullYear()+).substr(4-RegExp.$1.length));}for(varkino){if(newRegExp((+k+)).test(style)){style=style.replace(RegExp.$1,RegExp.$1.length==1?o[k]:(00+o[k]).substr((+o[k]).length));}}returnstyle;}Calendar.prototype.ReturnDate=function(dt){if(this.dateControl!=null){this.dateControl.value=dt;}calendar.hide();if(this.dateControl.onchange==null){return;}//将onchange转成其它函数,以免触发验证事件varev=this.dateControl.onchange.toString();//找出函数的字串ev=ev.substring(((ev.indexOf(ValidatorOnChange();)0)?ev.indexOf(ValidatorOnChange();)+20:ev.indexOf({)+1),ev.lastIndexOf(}));//去除验证函数ValidatorOnChange();varfun=newFunction(ev);//重新定义函数this.dateControl.changeEvent=fun;this.dateControl.changeEvent();//触发自定义changeEvent函数}/**//**//**//**//**//**//**//***日历类*@parambeginYear1990*@paramendYear2010*@paramlang0(中文)|1(英语)可自由扩充*@paramdateFormatStyleyyyy-MM-dd;*@version2006-04-01*@authorKimSoft(jinqinghua[at]gmail.com)*@update*/functionCalendar(beginYear,endYear,lang,dateFormatStyle){this.beginYear=1950;this.endYear=2050;this.lang=0;//0(中文)|1(英文)this.dateFormatStyle=yyyy-MM-ddhh:mm:ss;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=newDate();this.year=this.date.getFullYear();this.month=this.date.getMonth();this.day=this.date.getDate();this.hour=this.date.getHours();this.minute=this.date.getMinutes();this.second=this.date.getSeconds();this.colors={cur_word:#FFFFFF,//当日日期文字颜色cur_bg:#00FF00,//当日日期单元格背影色sel_bg:#FFCCCC,//已被选择的日期单元格背影色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控件的背影色}/*//放到了show,因为要做pickMode判断this.draw();this.bindYear();this.bindMonth();*///this.changeSelect();//this.bindData();}/**//**//**//**//**//**//**//***日历类属性(语言包,可自由扩展)*/Calendar.language={year:[[]