复制代码 代码如下: <BR> var lunarInfo = new Array( <BR>0x04bd8, 0x04ae0, 0x0a570, 0x054d5, 0x0d260, 0x0d950, 0x16554, 0x056a0, 0x09ad0, 0x055d2, <BR>0x04ae0, 0x0a5b6, 0x0a4d0, 0x0d250, 0x1d255, 0x0b540, 0x0d6a0, 0x0ada2, 0x095b0, 0x14977, <BR>0x04970, 0x0a4b0, 0x0b4b5, 0x06a50, 0x06d40, 0x1ab54, 0x02b60, 0x09570, 0x052f2, 0x04970, <BR>0x06566, 0x0d4a0, 0x0ea50, 0x06e95, 0x05ad0, 0x02b60, 0x186e3, 0x092e0, 0x1c8d7, 0x0c950, <BR>0x0d4a0, 0x1d8a6, 0x0b550, 0x056a0, 0x1a5b4, 0x025d0, 0x092d0, 0x0d2b2, 0x0a950, 0x0b557, <BR>0x06ca0, 0x0b550, 0x15355, 0x04da0, 0x0a5d0, 0x14573, 0x052d0, 0x0a9a8, 0x0e950, 0x06aa0, <BR>0x0aea6, 0x0ab50, 0x04b60, 0x0aae4, 0x0a570, 0x05260, 0x0f263, 0x0d950, 0x05b57, 0x056a0, <BR>0x096d0, 0x04dd5, 0x04ad0, 0x0a4d0, 0x0d4d4, 0x0d250, 0x0d558, 0x0b540, 0x0b5a0, 0x195a6, <BR>0x095b0, 0x049b0, 0x0a974, 0x0a4b0, 0x0b27a, 0x06a50, 0x06d40, 0x0af46, 0x0ab60, 0x09570, <BR>0x04af5, 0x04970, 0x064b0, 0x074a3, 0x0ea50, 0x06b58, 0x055c0, 0x0ab60, 0x096d5, 0x092e0, <BR>0x0c960, 0x0d954, 0x0d4a0, 0x0da50, 0x07552, 0x056a0, 0x0abb7, 0x025d0, 0x092d0, 0x0cab5, <BR>0x0a950, 0x0b4a0, 0x0baa4, 0x0ad50, 0x055d9, 0x04ba0, 0x0a5b0, 0x15176, 0x052b0, 0x0a930, <BR>0x07954, 0x06aa0, 0x0ad50, 0x05b52, 0x04b60, 0x0a6e6, 0x0a4e0, 0x0d260, 0x0ea65, 0x0d530, <BR>0x05aa0, 0x076a3, 0x096d0, 0x04bd7, 0x04ad0, 0x0a4d0, 0x1d0b6, 0x0d250, 0x0d520, 0x0dd45, <BR>0x0b5a0, 0x056d0, 0x055b2, 0x049b0, 0x0a577, 0x0a4b0, 0x0aa50, 0x1b255, 0x06d20, 0x0ada0) <BR> var Animals = new Array("鼠", "牛", "虎", "兔", "龙", "蛇", "马", "羊", "猴", "鸡", "狗", "猪"); <BR> var Gan = new Array("甲", "乙", "丙", "丁", "戊", "己", "庚", "辛", "壬", "癸"); <BR> var Zhi = new Array("子", "丑", "寅", "卯", "辰", "巳", "午", "未", "申", "酉", "戌", "亥"); <BR> var now = new Date(); <BR> var SY = now.getFullYear(); <BR> var SM = now.getMonth(); <BR> var SD = now.getDate(); <br><br> //==== 传入 offset 传回干支, 0=甲子 <BR> function cyclical(num) { return (Gan[num % 10] + Zhi[num % 12]) } <br><br> //==== 传回农历 y年的总天数 <BR> function lYearDays(y) { <BR> var i, sum = 348 <BR> for (i = 0x8000; i > 0x8; i >>= 1) sum += (lunarInfo[y - 1900] & i) ? 1 : 0 <BR> return (sum + leapDays(y)) <BR> } <br><br> //==== 传回农历 y年闰月的天数 <BR> function leapDays(y) { <BR> if (leapMonth(y)) return ((lunarInfo[y - 1900] & 0x10000) ? 30 : 29) <BR> else return (0) <BR> } <br><br> //==== 传回农历 y年闰哪个月 1-12 , 没闰传回 0 <BR> function leapMonth(y) { return (lunarInfo[y - 1900] & 0xf) } <br><br> //====================================== 传回农历 y年m月的总天数 <BR> function monthDays(y, m) { return ((lunarInfo[y - 1900] & (0x10000 >> m)) ? 30 : 29) } <br><br> //==== 算出农历, 传入日期物件, 传回农历日期物件 <BR> // 该物件属性有 .year .month .day .isLeap .yearCyl .dayCyl .monCyl <BR> function Lunar(objDate) { <BR> var i, leap = 0, temp = 0 <BR> var baseDate = new Date(1900, 0, 31) <BR> var offset = (objDate - baseDate) / 86400000 <br><br> this.dayCyl = offset + 40 <BR> this.monCyl = 14 <br><br> for (i = 1900; i < 2050 && offset > 0; i++) { <BR> temp = lYearDays(i) <BR> offset -= temp <BR> this.monCyl += 12 <BR> } <BR> if (offset < 0) { <BR> offset += temp; <BR> i--; <BR> this.monCyl -= 12 <BR> } <br><br> this.year = i <BR> this.yearCyl = i - 1864 <br><br> leap = leapMonth(i) //闰哪个月 <BR> this.isLeap = false<br><br> for (i = 1; i < 13 && offset > 0; i++) { <BR> //闰月 <BR> if (leap > 0 && i == (leap + 1) && this.isLeap == false) <BR> { --i; this.isLeap = true; temp = leapDays(this.year); } <BR> else<BR> { temp = monthDays(this.year, i); } <br><br> //解除闰月 <BR> if (this.isLeap == true && i == (leap + 1)) this.isLeap = false<br><br> offset -= temp <BR> if (this.isLeap == false) this.monCyl++ <BR> } <br><br> if (offset == 0 && leap > 0 && i == leap + 1) <BR> if (this.isLeap) <BR> { this.isLeap = false; } <BR> else<BR> { this.isLeap = true; --i; --this.monCyl; } <br><br> if (offset < 0) { offset += temp; --i; --this.monCyl; } <br><br> this.month = i <BR> this.day = offset + 1 <BR> } <br><br> function YYMMDD() { <BR> var cl = '<font color="#0000df" STYLE="font-size:9pt;">'; <BR> if (now.getDay() == 0) cl = '<font color="#c00000" STYLE="font-size:9pt;">'; <BR> if (now.getDay() == 6) cl = '<font color="#00c000" STYLE="font-size:9pt;">'; <BR> return (cl + SY + '年' + (SM + 1) + '月' + SD + '日'); <BR> } <BR> function weekday() { <BR> var day = new Array("星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"); <BR> var cl = '<font color="#000000" STYLE="font-size:9pt;">'; <BR> if (now.getDay() == 0) cl = '<font color="#ff0000" STYLE="font-size:9pt;">'; <BR> if (now.getDay() == 6) cl = '<font color="#ff0000" STYLE="font-size:9pt;">'; <BR> return (cl + day[now.getDay()] + ''); <BR> } <BR> //==== 中文日期 <BR> function cDay(m, d) { <BR> var nStr1 = new Array('日', '一', '二', '三', '四', '五', '六', '七', '八', '九', '十'); <BR> var nStr2 = new Array('初', '十', '廿', '卅', ' '); <BR> var s; <BR> if (m > 10) { s = '十' + nStr1[m - 10] } else { s = nStr1[m] } s += '月'<BR> switch (d) { <BR> case 10: s += '初十'; break; <BR> case 20: s += '二十'; break; <BR> case 30: s += '三十'; break; <BR> default: s += nStr2[Math.floor(d / 10)]; s += nStr1[d % 10]; <BR> } <BR> return (s); <BR> } <br><br> function solarDay2() { <BR> var sDObj = new Date(SY, SM, SD); <BR> var lDObj = new Lunar(sDObj); <BR> var cl = '<font color="#000066" STYLE="font-size:9pt;">'; <BR> //农历BB'+(cld[d].isLeap?'闰 ':' ')+cld[d].lMonth+' 月 '+cld[d].lDay+' 日 <BR> var tt = '农历' + cDay(lDObj.month, lDObj.day); <BR> return (cl + tt + ''); <BR> } <BR> function solarDay3() { <BR> var sTermInfo = new Array(0, 21208, 42467, 63836, 85337, 107014, 128867, 150921, 173149, <br><br>195551, 218072, 240693, 263343, 285989, 308563, 331033, 353350, 375494, 397447, 419210, <br><br>440795, 462224, 483532, 504758) <BR> var solarTerm = new Array("小寒", "大寒", "立春", "雨水", "惊蛰", "春分", "清明", "谷雨", "立夏", "小满", "芒种", "夏至", "小暑", "大暑", "立秋", "处暑", "白露", "秋分", "寒露", "霜降", "立冬", "小雪", "大雪", "冬至") <BR> var lFtv = new Array("0101*春节", "0115 元宵节", "0505 端午节", "0707 七夕情人节", "0715 中元节", "0815 中秋节", "0909 重阳节", "1208 腊八节", "1224 小年", "0100*除夕") <BR> var sFtv = new Array("0101*元旦", "0214 情人节", "0308 妇女节", "0312 植树节", "0315 消费者权益日", "0401 愚人节", "0501 劳动节", "0504 青年节", "0512 护士节", "0601 儿童节", "0701 建党节 香港回归纪念", <BR>"0801 建军节", "0808 父亲节", "0909 南晟网周年纪念日", "0910 教师节", "0928 孔子诞辰", "1001*国庆节", <BR>"1006 老人节", "1024 联合国日", "1112 孙中山诞辰", "1220 澳门回归纪念", "1225 圣诞节", "1226 毛主席诞辰") <br><br> var sDObj = new Date(SY, SM, SD); <BR> var lDObj = new Lunar(sDObj); <BR> var lDPOS = new Array(3) <BR> var festival = '', solarTerms = '', solarFestival = '', lunarFestival = '', tmp1, tmp2; <BR> //农历节日 <BR> for (i in lFtv) <BR> if (lFtv[i].match(/^(\d{2})(.{2})([\s\*])(.+)$/)) { <BR> tmp1 = Number(RegExp.$1) - lDObj.month <BR> tmp2 = Number(RegExp.$2) - lDObj.day <BR> if (tmp1 == 0 && tmp2 == 0) lunarFestival = RegExp.$4 <BR> } <BR> //国历节日 <BR> for (i in sFtv) <BR> if (sFtv[i].match(/^(\d{2})(\d{2})([\s\*])(.+)$/)) { <BR> tmp1 = Number(RegExp.$1) - (SM + 1) <BR> tmp2 = Number(RegExp.$2) - SD <BR> if (tmp1 == 0 && tmp2 == 0) solarFestival = RegExp.$4 <BR> } <BR> //节气 <BR> tmp1 = new Date((31556925974.7 * (SY - 1900) + sTermInfo[SM * 2 + 1] * 60000) + Date.UTC(1900, 0, 6, 2, 5)) <BR> tmp2 = tmp1.getUTCDate() <BR> if (tmp2 == SD) solarTerms = solarTerm[SM * 2 + 1] <BR> tmp1 = new Date((31556925974.7 * (SY - 1900) + sTermInfo[SM * 2] * 60000) + Date.UTC(1900, 0, 6, 2, 5)) <BR> tmp2 = tmp1.getUTCDate() <BR> if (tmp2 == SD) solarTerms = solarTerm[SM * 2] <br><br> if (solarTerms == '' && solarFestival == '' && lunarFestival == '') <BR> festival = ''; <BR> else<BR> festival = '<FONT COLOR="#ff0000" STYLE="font-size:9pt;">' + solarTerms + ' ' + solarFestival + ' ' + lunarFestival + ''; <br><br> var cl = '<font color="#000066" STYLE="font-size:9pt;">'; <BR> return (cl + festival + ''); <BR> } <BR> function setCalendar() { <br><br> document.write(YYMMDD() + ' ' + weekday() + ' ' + solarDay2() + ' ' + solarDay3()); <BR> } <br><br> setCalendar(); <BR> //--> <br><br> //获取当月的阳历天数 <BR> function getNowMonthDays(year, month) { <BR> var isy = false; <BR> if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) isy = true; <BR> switch (month) { <BR> case 1: <BR> case 3: <BR> case 5: <BR> case 7: <BR> case 8: <BR> case 10: <BR> case 12: <BR> return 31; <BR> case 4: <BR> case 6: <BR> case 9: <BR> case 11: <BR> return 30; <BR> case 2: <BR> return isy ? 28 : 29; <BR> } <BR> } <BR> //获取该月一号是周几 <BR> function getStartWeek() { <BR> var tempnum = SD % 7; <BR> var week = now.getDay() + 1; //今天周几 <BR> var startweek = week + 7 - tempnum; <BR> return startweek > 7 ? startweek % 7 : startweek; <BR> } <br><br> //获取农历 <BR> function getSolarDay(year, month, day) { <BR> var sDObj = new Date(year, month, day); <BR> var lDObj = new Lunar(sDObj); <BR> //农历BB'+(cld[d].isLeap?'闰 ':' ')+cld[d].lMonth+' 月 '+cld[d].lDay+' 日 <BR> return cDay(lDObj.month, lDObj.day); <BR> } <br><br> //月视图 <BR> function showMonth() { <BR> debugger; <BR> var days = getNowMonthDays(SY, SM + 1); <BR> var startweek = getStartWeek(); <BR> var html = "<tr><td>星期一<td>星期二<td>星期三<td>星期四<td>星期五<td>星期六<td>星期日<tr>"; <BR> var index = 0; <BR> for (var i = 1; i < startweek; i++) { <BR> html += "<td> "; index++; <BR> } <BR> for (var i = 1; i <= days; i++) { <br><br> if (index % 7 == 0) { <BR> html += "<tr>"; <BR> } html += "<td>" + i + "<br>" + getSolarDay(SY, SM, i) + ""; <BR> index++; <BR> } <BR> for (var i = 0; i < 7; i++) { <BR> if (index % 7 == 0) { <BR> break; <BR> } <BR> html += "<td> "; index++; <BR> } <BR> html += ""; <BR> $("#table_calendar").html(html); <BR> } <br><br>