JavaScript日期控件

1、创建Calendar.js文件

/*********************************************************
 * 	使用方法
 * 		控件调用onclick="fPopCalendar(event,this,this)"
 * 	如下,给控件设置为readonly
 * 	<input type="text" onclick="fPopCalendar(event,this,this)" onfocus="this.select()" readonly="readonly" />
 * 	
 * 	如果页面乱码,把下面包含汉字的定义项放到页面中即可
********************************************************/
var gMonths=new Array("1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月");
var WeekDay=new Array("日","一","二","三","四","五","六");
var strToday="今天";
var strYear="年";
var strMonth="月";
var strDay="日";
var splitChar="-";
var startYear=1900;
var endYear=2050;
var dayTdHeight=20;
var dayTdTextSize=12;
var gcNotCurMonth="#E0E0E0";
var gcRestDay="#FF0000";
var gcWorkDay="#444444";
var gcMouseOver="#79D0FF";
var gcMouseOut="#F4F4F4";
var gcToday="#444444";
var gcTodayMouseOver="#6699FF";
var gcTodayMouseOut="#79D0FF";
var gdCtrl=new Object();
var goSelectTag=new Array();
var gdCurDate=new Date();
var giYear=gdCurDate.getFullYear();
var giMonth=gdCurDate.getMonth()+1;
var giDay=gdCurDate.getDate();
function $$(){var elements=new Array();for(var i=0;i<arguments.length;i++) {var element=arguments[i];if(typeof(arguments[i])=='string'){element=document.getElementById(arguments[i]);}if(arguments.length==1){return element;}elements.Push(element);}return elements;}
Array.prototype.Push=function(){var startLength=this.length;for(var i=0;i<arguments.length;i++){this[startLength+i]=arguments[i];}return this.length;}
String.prototype.HexToDec=function(){return parseInt(this,16);}
String.prototype.cleanBlank=function(){return this.isEmpty()?"":this.replace(/\s/g,"");}
function checkColor(){var color_tmp=(arguments[0]+"").replace(/\s/g,"").toUpperCase();var model_tmp1=arguments[1].toUpperCase();var model_tmp2="rgb("+arguments[1].substring(1,3).HexToDec()+","+arguments[1].substring(1,3).HexToDec()+","+arguments[1].substring(5).HexToDec()+")";model_tmp2=model_tmp2.toUpperCase();if(color_tmp==model_tmp1 ||color_tmp==model_tmp2){return true;}return false;}
function $V(){return $$(arguments[0]).value;}
function fPopCalendar(evt,popCtrl,dateCtrl){
    evt.cancelBubble=true;
    gdCtrl=dateCtrl;
    if(gdCtrl.value == ''){
        fSetYearMon(giYear,giMonth);
    }else{
        var aDates = gdCtrl.value.split('-')
        fSetYearMon(aDates[0],aDates[1]);

    }
    
    var point=fGetXY(popCtrl);
    with($$("calendardiv").style){
        left=point.x+"px";
        top=(point.y+popCtrl.offsetHeight+1)+"px";
        visibility='visible';
        //zindex='99999';
        position='absolute';
    }
    $$("calendardiv").focus();
}
function fSetDate(iYear,iMonth,iDay){
    var iMonthNew=new String(iMonth);
    var iDayNew=new String(iDay);
    if(iMonthNew.length<2){
        iMonthNew="0"+iMonthNew;
    }
    if(iDayNew.length<2){
        iDayNew="0"+iDayNew;
    }
    gdCtrl.value=iYear+splitChar+iMonthNew+splitChar+iDayNew;
    fHideCalendar();
}
function fHideCalendar(){$$("calendardiv").style.visibility="hidden";for(var i=0;i<goSelectTag.length;i++){goSelectTag[i].style.visibility="visible";}goSelectTag.length=0;}
function fSetSelected(){
    var iOffset=0;
    var iYear=parseInt($$("tbSelYear").value);
    var iMonth=parseInt($$("tbSelMonth").value);
    var aCell=$$("cellText"+arguments[0]);
    aCell.bgColor=gcMouseOut;
    with(aCell){
        var iDay=parseInt(innerHTML);
        if(checkColor(style.color,gcNotCurMonth)){
            iOffset=(innerHTML>10)?-1:1;
        }
        iMonth+=iOffset;
        if(iMonth<1){iYear--;iMonth=12;}
        else if(iMonth>12){iYear++;iMonth=1;}
    }
    fSetDate(iYear,iMonth,iDay);
}
function Point(iX,iY){this.x=iX;this.y=iY;}
function clearDate(){gdCtrl.value = '';fHideCalendar();}
function fBuildCal(iYear,iMonth){var aMonth=new Array();for(var i=1;i<7;i++){aMonth[i]=new Array(i);}var dCalDate=new Date(iYear,iMonth-1,1);var iDayOfFirst=dCalDate.getDay();var iDaysInMonth=new Date(iYear,iMonth,0).getDate();var iOffsetLast=new Date(iYear,iMonth-1,0).getDate()-iDayOfFirst+1;var iDate=1;var iNext=1;for(var d=0;d<7;d++){aMonth[1][d]=(d<iDayOfFirst)?(iOffsetLast+d)*(-1):iDate++;}for(var w=2;w<7;w++){for(var d=0;d<7;d++){aMonth[w][d]=(iDate<=iDaysInMonth)?iDate++:(iNext++)*(-1);}}return aMonth;}
function fDrawCal(iYear,iMonth,iCellHeight,iDateTextSize){
    var colorTD=" bgcolor='"+gcMouseOut+"' bordercolor='"+gcMouseOut+"'";
    var styleTD=" valign='middle' align='center' style='height:"+iCellHeight+"px !important;font-weight:bolder;font-size:"+iDateTextSize+"px;";
    var dateCal="";
    dateCal+="<tr>";
    for(var i=0;i<7;i++){
        dateCal+="<td "+colorTD+styleTD+"color:#990099'>"+WeekDay[i]+"</td>";
    }
    dateCal+="</tr>";
    for(var w=1;w<7;w++){
        dateCal+="<tr>";
        for(var d=0;d<7;d++){
            var tmpid=w+""+d;
            dateCal+="<td"+styleTD+"cursor:pointer;' onclick='fSetSelected("+tmpid+")'>";
            dateCal+="<span id='cellText"+tmpid+"'></span>";
            dateCal+="</td>";
        }
        dateCal+="</tr>";
    }
    return dateCal;
}
function fUpdateCal(iYear,iMonth){
    var myMonth=fBuildCal(iYear,iMonth);
    var i=0;
    var aDates = gdCtrl.value.split('-')
    for(var w=1;w<7;w++){
        for(var d=0;d<7;d++){
            with($$("cellText"+w+""+d)){
                parentNode.bgColor=gcMouseOut;
                parentNode.borderColor=gcMouseOut;
                parentNode.onmouseover=function(){
                    this.bgColor=gcMouseOver;
                };
                parentNode.onmouseout=function(){
                    this.bgColor=gcMouseOut;
                };
                if(myMonth[w][d]<0){
                    style.color=gcNotCurMonth;
                    innerHTML=Math.abs(myMonth[w][d]);
                }else{
                    style.color=((d==0)||(d==6))?gcRestDay:gcWorkDay;
                    innerHTML=myMonth[w][d];
                    
                    if(iYear==giYear && iMonth==giMonth && myMonth[w][d]==giDay){
                        style.color=gcToday;
                        parentNode.bgColor=gcTodayMouseOut;
                        parentNode.onmouseover=function(){
                            this.bgColor=gcTodayMouseOver;
                        };
                        parentNode.onmouseout=function(){
                            this.bgColor=gcTodayMouseOut;
                        };
                    }
                    if(aDates.length == 3 && iYear==aDates[0] && iMonth==aDates[1] && myMonth[w][d]==aDates[2]){
                        style.color=gcToday;
                        parentNode.bgColor='#ffdd66';
                        parentNode.onmouseover=function(){
                            this.bgColor='#ffdd66';
                        };
                        parentNode.onmouseout=function(){
                            this.bgColor='#ffdd66';
                        };
                    }

                }
            }
        }
    }
}
function fSetYearMon(iYear,iMon){$$("tbSelMonth").options[iMon-1].selected=true;for(var i=0;i<$$("tbSelYear").length;i++){if($$("tbSelYear").options[i].value==iYear){$$("tbSelYear").options[i].selected=true;}}fUpdateCal(iYear,iMon);}
function fPrevMonth(){var iMon=$$("tbSelMonth").value;var iYear=$$("tbSelYear").value;if(--iMon<1){iMon=12;iYear--;}fSetYearMon(iYear,iMon);}
function fNextMonth(){var iMon=$$("tbSelMonth").value;var iYear=$$("tbSelYear").value;if(++iMon>12){iMon=1;iYear++;}fSetYearMon(iYear,iMon);}
function fGetXY(aTag){
    var oTmp=aTag;
    var pt=new Point(0,0);
    do{
        pt.x+=oTmp.offsetLeft;
        pt.y+=oTmp.offsetTop;
        if(oTmp.offsetParent){
            oTmp=oTmp.offsetParent;
        }else{
            break;
        }
    }while(oTmp.tagName.toUpperCase()!="BODY");
    return pt;
}
function getDateDiv(){
    var noSelectForIE="";
    var noSelectForFireFox="";
    if(document.all){
        noSelectForIE="onselectstart='return false;'";
    }else{
        noSelectForFireFox="-moz-user-select:none;";
    }
    var dateDiv="";
    dateDiv += "<div id='calendardiv'  onclick='event.cancelBubble=true' " + noSelectForIE + " style='" + noSelectForFireFox + "position:absolute;z-index:99999;visibility:hidden;border:1px solid #999999;width:174px;'>";
    dateDiv += "<table border='0' bgcolor='#E0E0E0' cellpadding='1' cellspacing='1' width='100%'  >";
    dateDiv+="<tr>";
    dateDiv+="<td><input type='button' id='PrevMonth' value='<' style='height:20px;width:20px;font-weight:bolder;' onclick='fPrevMonth()'>";
    dateDiv+="</td><td><select id='tbSelYear' style='border:1px solid;' onchange='fUpdateCal($V(\"tbSelYear\"),$V(\"tbSelMonth\"))'>";
    for(var i=startYear;i<endYear;i++){
        dateDiv+="<option value='"+i+"'>"+i+strYear+"</option>";
    }
    dateDiv+="</select></td><td>";
    dateDiv+="<select id='tbSelMonth' style='border:1px solid;' onchange='fUpdateCal($V(\"tbSelYear\"),$V(\"tbSelMonth\"))'>";
    for(var i=0;i<12;i++){
        dateDiv+="<option value='"+(i+1)+"'>"+gMonths[i]+"</option>";
    }
    dateDiv+="</select></td><td>";
    dateDiv+="<input type='button' id='NextMonth' value='>' style='height:20px;width:20px;font-weight:bolder;' onclick='fNextMonth()'>";
    dateDiv+="</td>";dateDiv+="</tr><tr>";
    dateDiv+="<td align='center' colspan='4'>";
    dateDiv+="<div style='background-color:#cccccc'><table width='100%' border='0' cellpadding='3' cellspacing='1'>";
    dateDiv+=fDrawCal(giYear,giMonth,dayTdHeight,dayTdTextSize);
    dateDiv+="</table></div>";
    dateDiv+="</td>";
    dateDiv+="</tr><tr><td align='center' colspan='4' nowrap>";
    dateDiv+="<span onclick=\"clearDate();\" style=\"font-size:12px;cursor:pointer;\"  onmouseover='this.style.color=\""+gcMouseOver+"\"' onmouseout='this.style.color=\"#000000\"'>清空</span>      <span style='cursor:pointer; font-size:12px' onclick='fSetDate(giYear,giMonth,giDay)' onmouseover='this.style.color=\""+gcMouseOver+"\"' onmouseout='this.style.color=\"#000000\"'>"+strToday+":"+giYear+strYear+giMonth+strMonth+giDay+strDay+"</span>";
    dateDiv+="</tr></tr>";
    dateDiv+="</table><iframe style='position:absolute; left:0px;top:0px;width:174px;height:190px;z-index:-1;' frameborder='0'></iframe></div>";
    return dateDiv;
}
with(document){onclick=fHideCalendar;write(getDateDiv());}


// 对Date的扩展,将 Date 转化为指定格式的String 
// 月(M)、日(d)、小时(h)、分(m)、秒(s)、季度(q) 可以用 1-2 个占位符, 
// 年(y)可以用 1-4 个占位符,毫秒(S)只能用 1 个占位符(是 1-3 位的数字) 
// 例子: 
// (new Date()).Format("yyyy-MM-dd hh:mm:ss.S") ==> 2006-07-02 08:09:04.423 
// (new Date()).Format("yyyy-M-d h:m:s.S") ==> 2006-7-2 8:9:4.18 
Date.prototype.Format = function(fmt){
    var o = { 
        "M+" : this.getMonth()+1, //月份 
        "d+" : this.getDate(), //日 
        "h+" : this.getHours(), //小时 
        "m+" : this.getMinutes(), //分 
        "s+" : this.getSeconds(), //秒 
        "q+" : Math.floor((this.getMonth()+3)/3), //季度 
        "S" : this.getMilliseconds() //毫秒 
    }; 
    if(/(y+)/.test(fmt)) 
        fmt=fmt.replace(RegExp.$1, (this.getFullYear()+"").substr(4 - RegExp.$1.length)); 
        for(var k in o) 
            if(new RegExp("("+ k +")").test(fmt)) 
                fmt = fmt.replace(RegExp.$1, (RegExp.$1.length==1) ? (o[k]) : (("00"+ o[k]).substr((""+ o[k]).length))); 
    return fmt; 
    
}

2、使用

<input type="text" onclick="fPopCalendar(event,this,this)" readonly="readonly"  />

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

pan_junbiao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值