无聊,写了个日历程序,欢迎拍砖
New Document
body{font:12px Arial;}
a:link,a:visited,a:active{color:#000;text-decoration:none;background:none;}
a:hover{color:#fff;text-decoration:none;background:#000;}
一个通用的日历程序,IE6、Mozilal系列测试通过.欢迎使用
/*****************
*
*日历程序
*作者:marcian
*主页:www.marcian.net
*2007.2.10
*特点:封装,对外暴露一个方法来调用日历,最大最小年份可调,日期可用性选择.采用DOM方式创建日历对象,页面只需调用一个js文件即可。
*使用方法:创建日历对象,然后调用此对象的showCalendar()方法即可.
*兼容性:IE6,Mozilla系列测试通过
*欢迎交流.
*自由使用,但请保留作者信息。
*公历算法来源于网络
*******************/
/*****************
*为Date对象添加定制的方法
******************/
//获取当前时间
Date.prototype.getTheDate=function(){
return {Y:this.getFullYear(),M:this.getMonth()+1,D:this.getDate()};
}
Date.prototype.beforeTheDate=function(Y,M,D){
if(Ythis.getFullYear()||(Y==this.getFullYear()&&M>this.getMonth()+1)||(Y==this.getFullYear()&&M==this.getMonth()+1&&D>this.getDate()))
{
return true;
}
else
{
return false;
}
}
Date.prototype.getThePreDate=function(dateObj,minYear){
var M=dateObj.M;
var Y=dateObj.Y;
var D=dateObj.D;
M--;
if(M12)
{
M=1;
Y++;
}
if(Y>maxYear)
{
Y=maxYear;
}
return "{Y:"+Y+",M:"+M+",D:"+D+"}";
}
/*****************
*日历的构造函数
******************/
function MarcianCalendar(calendarObjName,display,minYear,maxYear,afterNotUsed,beforeNotUsed)
{
/*********************************************
*参数说明
*calendarObjName:创建的日历对象实例名,必须
*display:显示日历 true为显示,false为不显示.可选,默认为不显示
*minYear:最小年份,可选,默认为1900
*maxYear:最打年份,可选,默认为2900
*afterNotUsed:大于当前时间的日期不可用,可选,默认为false;
*beforeNotUsed:小于当前日期的时间不可用,可选,默认为false;
**********************************************/
/*属性*/
this.calendarName=calendarObjName;//创建的日历对象实例名
this.display=display?"block":"none";//
this.minYear=minYear?minYear:1900;//
this.maxYear=maxYear?maxYear:2900;//
this.afterNotUsed=afterNotUsed?afterNotUsed:false;
this.beforeNotUsed=beforeNotUsed?beforeNotUsed:false;
this.calendarContainer=null;//日历容器
this.calendarMenuContainer=null;//日历菜单容器
this.calendarDateContainer=null;//日历日期容器
this.calendarWeekContainer=null;//日历星期容器
this.calendarCloseContainer=null;//关闭菜单容器
this.weekAry=["日","一","二","三","四","五","六"];//星期数组
this.date=new Date();//日期对象
this.moveObjAry=new Array();//移动对象数组
this.fillObjAry=new Array();//填充对象数组
this.id=0;//当前ID号
//获取指定页面元素的坐标
this.getObjOffset=function(obj){
var x=obj.offsetWidth;
var y=0;
while(obj.offsetParent)
{
x+=obj.offsetLeft;
y+=obj.offsetTop;
obj=obj.offsetParent;
}
return{x:x,y:y};
}
//移动日历
this.moveCalendar=function(id){
var offset=this.getObjOffset(this.$(this.moveObjAry[id]));
this.calendarContainer.style.cssText=this.calendarContainer.getAttribute("css")+";top:"+offset.y+"px;left:"+offset.x+"px;display:block";
this.id=id;
}
//填充日期
this.fillDate=function(dateStr){
var fillObj=this.$(this.fillObjAry[this.id]);
if(fillObj.type=="text")
{
fillObj.value=dateStr;
}
if(this.id=0;j--)
{
this.calendarDateContainer.removeChild(this.calendarDateContainer.childNodes[j]);
}
}
var W=1;
var Y=dateObj.Y;
var M=dateObj.M;
var D=dateObj.D;
var dayAry=[31,28,31,30,31,30,31,31,30,31,30,31];
var r=[0,3,3,6,1,4,6,2,5,0,3,5];
var c=6;
if(Y%400==0||(Y%4==0&&Y%100!=0))
{
dayAry[1]=29;
}
if((Y%400==0||(Y%4==0&&Y%100!=0))&&M=w&&d"+d+"";
}
d++;
}
start>w?start=w:start++;
div.appendChild(p);
}
this.calendarDateContainer.appendChild(div);
}
}
/*设置日历控制菜单*/
this.setMenu=function(dateObj){
this.calendarMenuContainer.innerHTML="上月 "+dateObj.Y+"-"+(dateObj.M>9?dateObj.M:"0"+dateObj.M)+" 下月";
this.setDate(dateObj);
}
/*初始化*/
this.initial=function(){
this.calendarContainer=document.createElement("div");
this.calendarContainer.style.cssText="position:absolute;top:0px;left:0px;width:140px;border:1px solid #666;padding:1px;background:#fff;font:12px Arial;margin-bottom:1px;display:"+this.display+";";
this.calendarContainer.setAttribute("css",this.calendarContainer.style.cssText);
this.calendarMenuContainer=document.createElement("div");
this.calendarMenuContainer.style.cssText="width:140px;height:20px;background:#aaa;color:#fff;text-align:center;padding-top:3px;";
this.calendarWeekContainer=document.createElement("div");
this.calendarWeekContainer.style.cssText="width:140px;height:20px;margin-bottom:1px;";
for(i=0;i关闭日历";
this.calendarContainer.appendChild(this.calendarMenuContainer);
this.calendarContainer.appendChild(this.calendarWeekContainer);
this.calendarContainer.appendChild(this.calendarDateContainer);
this.calendarContainer.appendChild(this.calendarCloseContainer);
document.body.appendChild(this.calendarContainer);
this.setMenu(this.date.getTheDate());
}
//检查输入的年参数是否符合要求.
this.checkYear=function(){
if(!this.minYear.toString().match(/\d\d\d\d/))
{
alert("最低年份输入不正确,重新输入");
}
else if(!this.maxYear.toString().match(/\d\d\d\d/))
{
alert("最高年份输入不正确,重新输入");
}
else if(eval("0+"+this.maxYear)
[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]