网上搜了一把,都是公历的日期录入控件,都没看到有农历的。
求教高人

解决方案 »

  1.   

    http://school.cfan.com.cn/pro/pother/2006-08-30/1156913028d14975.shtml可以参考下这边的js实现
      

  2.   

    筒子们,因为我的js简直就是渣,所以只好在网上找了个普通日历控件,然后找了个公历转农历的算法,拼凑起来了。好吧,对于我这种伸手党,我接受大大们的抨击。
    要分成2截发
    调用函数calendar();document.write("<div align='center' id=meizzCalendarLayer style='BORDER-RIGHT: #000000 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #000000 1px solid; PADDING-LEFT: 5px; Z-INDEX: 999999; BACKGROUND: #ffffff; FILTER: Alpha(opacity=85); LEFT: 205px; PADDING-BOTTOM: 5px; BORDER-LEFT: #000000 1px solid; WIDTH: 235px; LINE-HEIGHT: 5px; PADDING-TOP: 5px; BORDER-BOTTOM: #000000 1px solid; POSITION: absolute; TOP: 220px; HEIGHT: 235px; display: none'>");
    document.write("<iframe name=meizzCalendarIframe scrolling=no frameborder=0 width=100% height=100%></iframe></div>");
    var lunarinfo = new Array(0x04bd8, 0x04ae0, 0x0a570, 0x054d5, 0x0d260, 0x0d950, 0x16554, 0x056a0, 0x09ad0, 0x055d2, 0x04ae0, 0x0a5b6, 0x0a4d0, 0x0d250, 0x1d255, 0x0b540, 0x0d6a0, 0x0ada2, 0x095b0, 0x14977, 0x04970, 0x0a4b0, 0x0b4b5, 0x06a50, 0x06d40, 0x1ab54, 0x02b60, 0x09570, 0x052f2, 0x04970, 0x06566, 0x0d4a0, 0x0ea50, 0x06e95, 0x05ad0, 0x02b60, 0x186e3, 0x092e0, 0x1c8d7, 0x0c950, 0x0d4a0, 0x1d8a6, 0x0b550, 0x056a0, 0x1a5b4, 0x025d0, 0x092d0, 0x0d2b2, 0x0a950, 0x0b557, 0x06ca0, 0x0b550, 0x15355, 0x04da0, 0x0a5d0, 0x14573, 0x052d0, 0x0a9a8, 0x0e950, 0x06aa0, 0x0aea6, 0x0ab50, 0x04b60, 0x0aae4, 0x0a570, 0x05260, 0x0f263, 0x0d950, 0x05b57, 0x056a0, 0x096d0, 0x04dd5, 0x04ad0, 0x0a4d0, 0x0d4d4, 0x0d250, 0x0d558, 0x0b540, 0x0b5a0, 0x195a6, 0x095b0, 0x049b0, 0x0a974, 0x0a4b0, 0x0b27a, 0x06a50, 0x06d40, 0x0af46, 0x0ab60, 0x09570, 0x04af5, 0x04970, 0x064b0, 0x074a3, 0x0ea50, 0x06b58, 0x055c0, 0x0ab60, 0x096d5, 0x092e0, 0x0c960, 0x0d954, 0x0d4a0, 0x0da50, 0x07552, 0x056a0, 0x0abb7, 0x025d0, 0x092d0, 0x0cab5, 0x0a950, 0x0b4a0, 0x0baa4, 0x0ad50, 0x055d9, 0x04ba0, 0x0a5b0, 0x15176, 0x052b0, 0x0a930, 0x07954, 0x06aa0, 0x0ad50, 0x05b52, 0x04b60, 0x0a6e6, 0x0a4e0, 0x0d260, 0x0ea65, 0x0d530, 0x05aa0, 0x076a3, 0x096d0, 0x04bd7, 0x04ad0, 0x0a4d0, 0x1d0b6, 0x0d250, 0x0d520, 0x0dd45, 0x0b5a0, 0x056d0, 0x055b2, 0x049b0, 0x0a577, 0x0a4b0, 0x0aa50, 0x1b255, 0x06d20, 0x0ada0);
    var animals = new Array("鼠", "牛", "虎", "兔", "龙", "蛇", "马", "羊", "猴", "鸡", "狗", "猪");
    var gan = new Array("甲", "乙", "丙", "丁", "戊", "己", "庚", "辛", "壬", "癸");
    var zhi = new Array("子", "丑", "寅", "卯", "辰", "巳", "午", "未", "申", "酉", "戌", "亥");
    var now = new Date();
    var sy = now.getYear();
    var sm = now.getMonth();
    var sd = now.getDate();
    var xq = now.getDay();
      

  3.   

    function writeIframe()
    {var strIframe = "<html><head><meta http-equiv='Content-Type' content='text/html; charset=gb2312'><style>" +
        "*{font-size: 12px; font-family: 宋体}" +
        "</style></head><body onselectstart='return false' style='margin: 0px' oncontextmenu='return false'><form name=meizz>";
        if (WebCalendar.drag) {
            strIframe += "<scr" + "ipt language=javascript>" +
            "var drag=false, cx=0, cy=0, o = parent.WebCalendar.calendar; function document.onmousemove(){" +
            "if(parent.WebCalendar.drag && drag){if(o.style.left=='')o.style.left=0; if(o.style.top=='')o.style.top=0;" +
            "o.style.left = parseInt(o.style.left) + window.event.clientX-cx;" +
            "o.style.top = parseInt(o.style.top) + window.event.clientY-cy;}}" +
            "function document.onkeydown(){ switch(window.event.keyCode){ case 27 : parent.hiddenCalendar(); break;" +
            "case 37 : parent.prevM(); break; case 38 : parent.prevY(); break; case 39 : parent.nextM(); break; case 40 : parent.nextY(); break;" +
            "case 84 : document.forms[0].today.click(); break;} window.event.keyCode = 0; window.event.returnValue= false;}" +
            "function dragStart(){cx=window.event.clientX; cy=window.event.clientY; drag=true;}</scr" + "ipt>"
        }
        strIframe += "<select name=tmpYearSelect onblur='parent.hiddenSelect(this)' style='z-index:1;position:absolute;top:3;left:40;display:none'" +
        " onchange='parent.WebCalendar.thisYear =this.value; parent.hiddenSelect(this); parent.writeCalendar();'></select>" +
        "<select name=tmpMonthSelect onblur='parent.hiddenSelect(this)' style='z-index:1; position:absolute;top:3;left:110;display:none'" +
        " onchange='parent.WebCalendar.thisMonth=this.value; parent.hiddenSelect(this); parent.writeCalendar();'></select>" +
        "<select name=tmpHourSelect onblur='parent.hiddenSelect(this)' style='z-index:1; position:absolute;top:179;left:35;display:none'" +
        " onchange='parent.WebCalendar.thisHour=this.value; parent.hiddenSelect(this); parent.writeCalendar();'></select>" +
        "<select name=tmpMinuteSelect onblur='parent.hiddenSelect(this)' style='z-index:1; position:absolute;top:179;left:80;display:none'" +
        " onchange='parent.WebCalendar.thisMinute=this.value; parent.hiddenSelect(this); parent.writeCalendar();'></select>" +
        "<select name=tmpSecondSelect onblur='parent.hiddenSelect(this)' style='z-index:1; position:absolute;top:179;left:125;display:none'" +
        " onchange='parent.WebCalendar.thisSecond=this.value; parent.hiddenSelect(this); parent.writeCalendar();'></select>" +
        "<table id=tableMain border='1' cellpadding='0' cellspacing='0' bordercolor='#C0D0E8' bordercolorlight='#C0D0E8' bordercolordark='#C0D0E8' width='100%' height='100%'>" +
        "<tr><td height=19 bgcolor='" + WebCalendar.lightColor + "'>" +
        "    <table width='98%' id=tableHead border=0 cellspacing=1 cellpadding=0 align='center'><tr align=center>" +
        "    <td title='向前翻 1 年' onclick='parent.prevY()' style='cursor: hand' class=bg><<</td>" +
        "    <td width=15 height=19 class=bg title='向前翻 1 月' style='cursor: hand' onclick='parent.prevM()'><</td>" +
        "    <td width=60 id=meizzYearHead title='点击此处选择年份' onclick='parent.funYearSelect(parseInt(this.innerText, 10))'" +
        "        onmouseover='this.bgColor=parent.WebCalendar.darkColor; this.style.color=parent.WebCalendar.lightColor'" +
        "        onmouseout='this.bgColor=parent.WebCalendar.lightColor; this.style.color=parent.WebCalendar.wordColor'></td>" +
        "    <td width=50 id=meizzYearMonth title='点击此处选择月份' onclick='parent.funMonthSelect(parseInt(this.innerText, 10))'" +
        "        onmouseover='this.bgColor=parent.WebCalendar.darkColor; this.style.color=parent.WebCalendar.lightColor'" +
        "        onmouseout='this.bgColor=parent.WebCalendar.lightColor; this.style.color=parent.WebCalendar.wordColor'></td>" +
        "    <td width=15 class=bg title='向后翻 1 月' onclick='parent.nextM()' style='cursor: hand'>></td>" +
        "    <td title='向后翻 1 年' onclick='parent.nextY()' style='cursor: hand' class=bg>>></td>" +
        "</tr></table>" +
        "</td></tr><tr><td height=20 align='center'><table id=tableWeek border=1 width='98%' cellpadding=0 cellspacing=0 ";
        if (WebCalendar.drag) {
            strIframe += "onmousedown='dragStart()' onmouseup='drag=false' onmouseout='drag=false'";
        }
        strIframe += " borderColorLight='#FFFFFF' borderColorDark='#FFFFFF'>" +
        "    <tr align=center bgcolor='#6699FF'><td height=20><font color='#FF0000'>日</font></td><td>一</td><td>二</td><td>三</td><td>四</td><td>五</td><td><font color='#FF0000'>六</font></td></tr></table>" +
        "</td></tr><tr><td valign=top align='center' bgcolor='" + WebCalendar.lightColor + "'>" +
        "    <table id=tableDay height='100%' width='98%' border=0 cellspacing=1 cellpadding=0>";
        for (var x = 0; x < 5; x++) {
            strIframe += "<tr>";
            for (var y = 0; y < 7; y++) strIframe += "<td class=out align='center' id='meizzDay" + (x * 7 + y) + "'></td>";
            strIframe += "</tr>";
        }
        strIframe += "<tr>";
        for (var x = 35; x < 39; x++) strIframe += "<td class=out align='center' id='meizzDay" + x + "'></td>";
        strIframe += "<td colspan=3 class=out title='" + WebCalendar.regInfo + "'><input style=' background-color: " +
        WebCalendar.btnBgColor + ";cursor: hand; padding-top: 4px; width: 100%; height: 100%; border: 0' onfocus='this.blur()'" +
        " type=button value='    关闭' title='关闭' onclick='parent.hiddenCalendar()'></td></tr></table>" +
        "</td></tr><tr style='display: none'><td height=20 align='center' bgcolor='" + WebCalendar.lightColor + "'>" +
        "    <table border=0 cellpadding=1 cellspacing=0 width='98%'>" +
        "    <tr>" +
        "        <td width=15 height=19 title='向前翻 1 小时' onclick='parent.prevH()' style='cursor: hand' class=bg><<</td>" +
        "        <td width=15 height=19 title='向前翻 1 分钟' onclick='parent.prevMi()' style='cursor: hand' class=bg><</td>" +
        "        <td width=60 id=meizzHourHead title='点击此处选择小时' onclick='parent.funHourSelect(parseInt(this.innerText, 10))'" +
        "        onmouseover='this.bgColor=parent.WebCalendar.darkColor; this.style.color=parent.WebCalendar.lightColor'" +
        "        onmouseout='this.bgColor=parent.WebCalendar.lightColor; this.style.color=parent.WebCalendar.wordColor'></td>" +
        "    <td width=50 id=meizzMinuteHead title='点击此处选择分钟' onclick='parent.funMinuteSelect(parseInt(this.innerText, 10))'" +
        "        onmouseover='this.bgColor=parent.WebCalendar.darkColor; this.style.color=parent.WebCalendar.lightColor'" +
        "        onmouseout='this.bgColor=parent.WebCalendar.lightColor; this.style.color=parent.WebCalendar.wordColor'></td>" +
        "    <td width=50 id=meizzSecondHead title='点击此处选择秒' onclick='parent.funSecondSelect(parseInt(this.innerText, 10))'" +
        "        onmouseover='this.bgColor=parent.WebCalendar.darkColor; this.style.color=parent.WebCalendar.lightColor'" +
        "        onmouseout='this.bgColor=parent.WebCalendar.lightColor; this.style.color=parent.WebCalendar.wordColor'></td>" +
        "        <td title='向后翻 1 分钟' onclick='parent.nextMi()' style='cursor: hand' class=bg>></td>" +
        "        <td title='向后翻 1 小时' onclick='parent.nextH()' style='cursor: hand' class=bg>>></td>" +
        "</tr></table>" +    "</td></tr><table></form></body></html>";
        with(WebCalendar.iframe)
        {
            document.writeln(strIframe);
            document.close();
            for (var i = 0; i < 39; i++)
            {
                WebCalendar.dayObj[i] = eval("meizzDay" + i);
                WebCalendar.dayObj[i].onmouseover = dayMouseOver;
                WebCalendar.dayObj[i].onmouseout = dayMouseOut;
                WebCalendar.dayObj[i].onclick = returnDate;
            }
        }
    }
      

  4.   


    function WebCalendar() //初始化日历的设置{    this.daysMonth = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);    this.day = new Array(39); //定义日历展示用的数组    this.dayObj = new Array(39); //定义日期展示控件数组    this.dateStyle = null; //保存格式化后日期数组    this.objExport = null; //日历回传的显示控件    this.eventSrc = null; //日历显示的触发控件    this.inputDate = null; //转化外的输入的日期(d/m/yyyy)    this.thisYear = new Date().getFullYear(); //定义年的变量的初始值    this.thisMonth = new Date().getMonth() + 1; //定义月的变量的初始值    this.thisDay = new Date().getDate(); //定义日的变量的初始值    this.thisHour = new Date().getHours(); //定义小时得变量初始值    this.thisMinute = new Date().getMinutes(); //定义分钟得变量初始值    this.thisSecond = new Date().getSeconds(); //定义秒得标量的初始值    this.today = this.thisDay + "/" + this.thisMonth + "/" + this.thisYear; //今天(d/m/yyyy)    this.iframe = window.frames("meizzCalendarIframe"); //日历的 iframe 载体    this.calendar = getObjectById("meizzCalendarLayer"); //日历的层    this.dateReg = ""; //日历格式验证的正则式    this.yearFall = 50; //定义年下拉框的年差值    this.format = "yyyy-mm-dd"; //回传日期的格式    this.timeShow = true; //是否返回时间    this.drag = false; //是否允许拖动    this.darkColor = "#0000D0"; //控件的暗色    this.lightColor = "#FFFFFF"; //控件的亮色    this.btnBgColor = "#E6E6FA"; //控件的按钮背景色    this.wordColor = "#000080"; //控件的文字颜色    this.wordDark = "#DCDCDC"; //控件的暗文字颜色    this.dayBgColor = "#F5F5FA"; //日期数字背景色    this.todayColor = "#FF0000"; //今天在日历上的标示背景色    this.DarkBorder = "#D4D0C8"; //日期显示的立体表达色}
    var WebCalendar = new WebCalendar();function calendar() //主调函数{    var e = window.event.srcElement;
        writeIframe();    var o = WebCalendar.calendar.style;
        WebCalendar.eventSrc = e;    if (arguments.length == 0) WebCalendar.objExport = e;    else WebCalendar.objExport = eval(arguments[0]);    WebCalendar.iframe.tableWeek.style.cursor = WebCalendar.drag ? "move": "default";    var t = e.offsetTop,
        h = e.clientHeight,
        l = e.offsetLeft,
        p = e.type;    while (e = e.offsetParent) {
            t += e.offsetTop;
            l += e.offsetLeft;
        }    o.display = "";
        WebCalendar.iframe.document.body.focus();    var cw = WebCalendar.calendar.clientWidth,
        ch = WebCalendar.calendar.clientHeight;    var dw = document.body.clientWidth,
        dl = document.body.scrollLeft,
        dt = document.body.scrollTop;    if (document.body.clientHeight + dt - t - h >= ch) o.top = (p == "image") ? t + h: t + h + 6;    else o.top = (t - dt < ch) ? ((p == "image") ? t + h: t + h + 6) : t - ch;    if (dw + dl - l >= cw) o.left = l;
        else o.left = (dw >= cw) ? dw - cw + dl: dl;    if (!WebCalendar.timeShow) WebCalendar.dateReg = /^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2})$/;    else WebCalendar.dateReg = /^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2}) (\d{1,2}):(\d{1,2}):(\d{1,2})$/;
        writeCalendar();
        /*
        try{        if (WebCalendar.objExport.value.trim() != ""){            WebCalendar.dateStyle = WebCalendar.objExport.value.trim().match(WebCalendar.dateReg);            if (WebCalendar.dateStyle == null)            {                WebCalendar.thisYear   = new Date().getFullYear();                WebCalendar.thisMonth = new Date().getMonth()+ 1;                WebCalendar.thisDay    = new Date().getDate();                alert("原文本框里的日期有错误!\n可能与你定义的显示时分秒有冲突!");                writeCalendar(); return false;            }            else            {                WebCalendar.thisYear   = parseInt(WebCalendar.dateStyle[1], 10);                WebCalendar.thisMonth = parseInt(WebCalendar.dateStyle[3], 10);                WebCalendar.thisDay    = parseInt(WebCalendar.dateStyle[4], 10);                WebCalendar.inputDate = parseInt(WebCalendar.thisDay, 10) +"/"+ parseInt(WebCalendar.thisMonth, 10) +"/"+                 parseInt(WebCalendar.thisYear, 10); writeCalendar();            }        } else writeCalendar();    } catch(e){writeCalendar();}
    */
    }
    function dayMouseOut(){    this.className = "out";
        var d = WebCalendar.day[this.id.substr(8)],
        a = d.split("/");    this.style.removeAttribute('backgroundColor');    if (a[1] == WebCalendar.thisMonth && d != WebCalendar.today)    {        if (WebCalendar.dateStyle && a[0] == parseInt(WebCalendar.dateStyle[4], 10))        this.style.color = WebCalendar.lightColor;        this.style.color = WebCalendar.wordColor;    }}function writeCalendar() //对日历显示的数据的处理程序{    var y = WebCalendar.thisYear;    var m = WebCalendar.thisMonth;    var d = WebCalendar.thisDay;    var h = WebCalendar.thisHour;    var mi = WebCalendar.thisMinute;    var s = WebCalendar.thisSecond;    WebCalendar.daysMonth[1] = (0 == y % 4 && (y % 100 != 0 || y % 400 == 0)) ? 29 : 28;    if (! (y <= 9999 && y >= 1000 && parseInt(m, 10) > 0 && parseInt(m, 10) < 13 && parseInt(d, 10) > 0)) {        alert("对不起,你输入了错误的日期!");        WebCalendar.thisYear = new Date().getFullYear();        WebCalendar.thisMonth = new Date().getMonth() + 1;        WebCalendar.thisDay = new Date().getDate();        WebCalendar.thisHour = new Date().getHours();        WebCalendar.thisMinute = new Date().getMinutes();        WebCalendar.thisSecond = new Date().getSeconds();    }    y = WebCalendar.thisYear;    m = WebCalendar.thisMonth;    d = WebCalendar.thisDay;    h = WebCalendar.thisHour;    mi = WebCalendar.thisMinute;    s = WebCalendar.thisSecond;    WebCalendar.iframe.meizzYearHead.innerText = y + " 年";    WebCalendar.iframe.meizzYearMonth.innerText = parseInt(m, 10) + " 月";    WebCalendar.iframe.meizzHourHead.innerText = appendZero(parseInt(h, 10)) + " 时";    WebCalendar.iframe.meizzMinuteHead.innerText = appendZero(parseInt(mi, 10)) + " 分";    WebCalendar.iframe.meizzSecondHead.innerText = appendZero(parseInt(s, 10)) + " 秒";    WebCalendar.daysMonth[1] = (0 == y % 4 && (y % 100 != 0 || y % 400 == 0)) ? 29 : 28; //闰年二月为29天    var w = new Date(y, m - 1, 1).getDay();    var prevDays = m == 1 ? WebCalendar.daysMonth[11] : WebCalendar.daysMonth[m - 2];    for (var i = (w - 1); i >= 0; i--) //这三个 for 循环为日历赋数据源(数组 WebCalendar.day)格式是 d/m/yyyy    {        WebCalendar.day[i] = prevDays + "/" + (parseInt(m, 10) - 1) + "/" + y;        if (m == 1) WebCalendar.day[i] = prevDays + "/" + 12 + "/" + (parseInt(y, 10) - 1);        prevDays--;    }    for (var i = 1; i <= WebCalendar.daysMonth[m - 1]; i++) WebCalendar.day[i + w - 1] = i + "/" + m + "/" + y;    for (var i = 1; i < 39 - w - WebCalendar.daysMonth[m - 1] + 1; i++)    {        WebCalendar.day[WebCalendar.daysMonth[m - 1] + w - 1 + i] = i + "/" + (parseInt(m, 10) + 1) + "/" + y;        if (m == 12) WebCalendar.day[WebCalendar.daysMonth[m - 1] + w - 1 + i] = i + "/" + 1 + "/" + (parseInt(y, 10) + 1);    }    for (var i = 0; i < 39; i++) //这个循环是根据源数组写到日历里显示    {        var a = WebCalendar.day[i].split("/");
            var sdobj = new Date(a[2], a[1] - 1, a[0]);        var ldobj = new lunar(sdobj);
            var test;
            var m = "";
            if (ldobj.day == 1) test = (ldobj.isLeap ? '闰': '') + ldobj.month + '月' + (monthdays(ldobj.year, ldobj.month) == 29 ? '小': '大');
            else test = cDay(m, ldobj.day);        WebCalendar.dayObj[i].innerText = a[0] + "\r\n" + test;        WebCalendar.dayObj[i].title = cyclical(a[2] - 1900 + 36) + '年(' + animals[(a[2] - 4) % 12] + ')' + cDay(ldobj.month, ldobj.day);        WebCalendar.dayObj[i].bgColor = WebCalendar.dayBgColor;        WebCalendar.dayObj[i].style.color = WebCalendar.wordColor;        if ((i < 10 && parseInt(WebCalendar.day[i], 10) > 20) || (i > 27 && parseInt(WebCalendar.day[i], 10) < 12))        WebCalendar.dayObj[i].style.color = WebCalendar.wordDark;        if (WebCalendar.inputDate == WebCalendar.day[i]) //设置输入框里的日期在日历上的颜色        {
                WebCalendar.dayObj[i].bgColor = WebCalendar.darkColor;
                WebCalendar.dayObj[i].style.color = WebCalendar.lightColor;
            }        if (WebCalendar.day[i] == WebCalendar.today) //设置今天在日历上反应出来的颜色        {
                WebCalendar.dayObj[i].bgColor = WebCalendar.todayColor;
                WebCalendar.dayObj[i].style.color = WebCalendar.lightColor;
            }    }}function returnDate() //根据日期格式等返回用户选定的日期{    if (WebCalendar.objExport)    {        var returnValue;        var a = (arguments.length == 0) ? WebCalendar.day[this.id.substr(8)].split("/") : arguments[0].split("/");
            var sdobj = new Date(a[2], a[1] - 1, a[0]);
            var ldobj = new lunar(sdobj);
            returnValue = ldobj.year + appendZero(ldobj.month) + appendZero(ldobj.day);
            /*
            var d = WebCalendar.format.match(/^(\w{4})(-|\/)(\w{1,2})\2(\w{1,2})$/);        if(d==null){alert("你设定的日期输出格式不对!\r\n\r\n请重新定义 WebCalendar.format !"); return false;}        var flag = d[3].length==2 || d[4].length==2; //判断返回的日期格式是否要补零        returnValue = flag ? a[2] +d[2]+ appendZero(a[1]) +d[2]+ appendZero(a[0]) : a[2] +d[2]+ a[1] +d[2]+ a[0];        if(WebCalendar.timeShow)        {            var h = WebCalendar.thisHour, m = WebCalendar.thisMinute, s = WebCalendar.thisSecond;            returnValue += flag ? " "+ appendZero(h) +":"+ appendZero(m) +":"+ appendZero(s) : " "+ h +":"+ m +":"+ s;        }
    */
            WebCalendar.objExport.value = returnValue;        hiddenCalendar();    }}
      

  5.   

    LZ好像还加过我QQ。。我自愧不如。。
      

  6.   


    [code=JScript]
    function document.onclick(){    if (WebCalendar.eventSrc != window.event.srcElement) hiddenCalendar();}//==== 传入 offset 传回干支, 0=甲子
    function cyclical(num) {
        return (gan[num % 10] + zhi[num % 12])
    }
    //==== 传回农历 y年的总天数
    function lyeardays(y) {
        var i, sum = 348
        for (i = 0x8000; i > 0x8; i >>= 1) sum += (lunarinfo[y - 1900] & i) ? 1 : 0
        return (sum + leapdays(y))
    }
    //==== 传回农历 y年闰月的天数
    function leapdays(y) {
        if (leapmonth(y)) return ((lunarinfo[y - 1900] & 0x10000) ? 30 : 29)
        else return (0)
    }
    //==== 传回农历 y年闰哪个月 1-12 , 没闰传回 0
    function leapmonth(y) {
        return (lunarinfo[y - 1900] & 0xf)
    }
    //====================================== 传回农历 y年m月的总天数
    function monthdays(y, m) {
        return ((lunarinfo[y - 1900] & (0x10000 >> m)) ? 30 : 29)
    }
    //==== 算出农历, 传入日期物件, 传回农历日期物件
    //     该物件属性有 .year .month .day .isleap .yearcyl .daycyl .moncyl
    function lunar(objdate) {
        var i,leap = 0,temp = 0;
        var basedate = new Date(1900, 0, 31) ;
        var offset = (objdate - basedate) / 86400000 ;
        this.daycyl = offset + 40;
        this.moncyl = 14;
        for (i = 1900; i < 2050 && offset > 0; i++) {
            temp = lyeardays(i) ;
            offset -= temp ;
            this.moncyl += 12;
        }
        if (offset < 0) {
            offset += temp;
            i--;
            this.moncyl -= 12;
        }
        this.year = i ;
        this.yearcyl = i - 1864;
        leap = leapmonth(i); //闰哪个月
        this.isleap = false;
        for (i = 1; i < 13 && offset > 0; i++) {
            //闰月
            if (leap > 0 && i == (leap + 1) && this.isleap == false) {
                --i;
                this.isleap = true;
                temp = leapdays(this.year);
            } else {
                temp = monthdays(this.year, i);
            }
            //解除闰月
            if (this.isleap == true && i == (leap + 1)) this.isleap = false ;
            offset -= temp;
            if (this.isleap == false) this.moncyl++;
        }
        if (offset == 0 && leap > 0 && i == leap + 1) 
        {if (this.isleap) {
            this.isleap = false;
        } else {
            this.isleap = true; --i; --this.moncyl;
        }
        }
        if (offset < 0) {
            offset += temp; --i; --this.moncyl;
        }
        this.month = i ;this.day = offset + 1;
    }
    function cDay(m, d) {
        var s;
        var nstr1 = new Array('日', '一', '二', '三', '四', '五', '六', '七', '八', '九', '十');
        var nstr2 = new Array('初', '十', '廿', '卅', ' ');
        if (m == "") {
            switch (d) {
            case 10:
                s = '初十';
                break;
            case 20:
                s = '二十';
                break;
                break;
            case 30:
                s = '三十';
                break;
                break;
            default:
                s = nstr2[Math.floor(d / 10)];
                s += nstr1[d % 10];
            }
        } else {
            if (m > 10) {
                s = '十' + nstr1[m - 10]
            } else {
                s = nstr1[m]
            }
            s += '月'
            if (s == "十二月") s = "腊月";
            switch (d) {
            case 10:
                s += '初十';
                break;
            case 20:
                s += '二十';
                break;
            case 30:
                s += '三十';
                break;
            default:
                s += nstr2[Math.floor(d / 10)];
                s += nstr1[d % 10];
            }
        }    return (s);
    }
    [/code]