最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
JavaScript实现公历转农历功能示例
时间:2017-03-29 编辑:简简单单 来源:一聚教程网
代码如下 | 复制代码 |
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> varCalendarData =newArray(20); varmadd =newArray(12); varTheDate; vartgString ="甲乙丙丁戊己庚辛壬癸"; vardzString ="子丑寅卯辰巳午未申酉戌亥"; varnumString ="一二三四五六七八九十"; varmonString ="正二三四五六七八九十冬腊"; varweekString ="日一二三四五六"; varsx ="鼠牛虎兔龙蛇马羊猴鸡狗猪"; varcYear; varcMonth; varcDay; varcHour; varcDateString; varDateString; varBrowser = navigator.appName; functioninit() { CalendarData[0] = 0x41A95;//公元2001年; CalendarData[1] = 0xD4A; CalendarData[2] = 0xDA5; CalendarData[3] = 0x20B55; CalendarData[4] = 0x56A; CalendarData[5] = 0x7155B; CalendarData[6] = 0x25D; CalendarData[7] = 0x92D; CalendarData[8] = 0x5192B; CalendarData[9] = 0xA95; CalendarData[10] = 0xB4A; CalendarData[11] = 0x416AA; CalendarData[12] = 0xAD5; CalendarData[13] = 0x90AB5; CalendarData[14] = 0x4BA; CalendarData[15] = 0xA5B; CalendarData[16] = 0x60A57; CalendarData[17] = 0x52B; CalendarData[18] = 0xA93; CalendarData[19] = 0x40E95; madd[0] = 0; madd[1] = 31; madd[2] = 59; madd[3] = 90; madd[4] = 120; madd[5] = 151; madd[6] = 181; madd[7] = 212; madd[8] = 243; madd[9] = 273; madd[10] = 304; madd[11] = 334;//今年某月已过天数! } functionGetBit(m, n) { return(m >> n) & 1; }//n月是大月还是小月? functiongetInfo() {//用户输入日期! vararr = []; strData = prompt("请输入年 月 日,并以空格隔开!",""); if(strData ==null|| strData =="") { alert("输入错误!请刷新!"); returnfalse; } arr = strData.split(" "); y = arr[0]; m = arr[1] - 1; d = arr[2]; TheDate =newDate(y, m, d); }//getinfo(); functione2c() { getInfo(); vartotal, m, n, k; varisEnd =false; vartmp = TheDate.getYear(); if(tmp < 1900) tmp += 1900;//无用! total = (tmp - 2001) * 365 + Math.floor((tmp - 2001) / 4) + madd[TheDate.getMonth()] + TheDate.getDate() - 23;//2001年1月23是除夕;该句计算到起始年正月初一的天数 if(TheDate.getYear() % 4 == 0 && TheDate.getMonth() > 1) total++;//当年是闰年且已过2月再加一天! for(m = 0;; m++) { k = (CalendarData[m] < 0xfff) ? 11 : 12;//起始年+m闰月吗? for(n = k; n >= 0; n--) { if(total <= 29 + GetBit(CalendarData[m], n))//已找到农历年! { isEnd =true; break; } total = total - 29 - GetBit(CalendarData[m], n);//寻找农历年! } if(isEnd)break; } cYear = 2001 + m;//农历年 cMonth = k - n + 1;//农历月 cDay = total;//农历日 if(k == 12)//闰年! { if(cMonth == Math.floor(CalendarData[m] / 0x10000) + 1)//该月就是闰月! cMonth = 1 - cMonth; if(cMonth > Math.floor(CalendarData[m] / 0x10000) + 1) cMonth--;//该月是闰月后某个月! } cHour = Math.floor((TheDate.getHours() + 1) / 2); } functionGetcDateString() { vartmp =""; tmp += tgString.charAt((cYear - 4) % 10); //年干 tmp += dzString.charAt((cYear - 4) % 12);//年支 tmp +="年("; tmp += sx.charAt((cYear - 4) % 12); tmp +=")"; if(cMonth < 1) { tmp +="闰"; tmp += monString.charAt( - cMonth - 1);// 闰几月! }elsetmp += monString.charAt(cMonth - 1); tmp +="月"; tmp += (cDay < 11) ?"初": ((cDay < 20) ?"十": ((cDay < 30) ?"廿":"卅"));// 初几! if(cDay % 10 != 0 || cDay == 10) tmp += numString.charAt((cDay - 1) % 10); if(cHour == 12) tmp +="夜"; tmp += dzString.charAt((cHour) % 12); tmp +="时";//几时! cDateString = tmp; returntmp; } functionGetDateString()//公历时间! { vartmp =""; vart1 = TheDate.getYear(); if(t1 < 1900) t1 += 1900; tmp += t1 +"-"+ (TheDate.getMonth() + 1) +"-"+ TheDate.getDate() +" "+ TheDate.getHours() +":"+ ((TheDate.getMinutes() < 10) ?"0":"") + TheDate.getMinutes() +" 星期"+ weekString.charAt(TheDate.getDay()); DateString = tmp; returntmp; } functioncnCanlender() { init(); e2c(); GetDateString(); GetcDateString(); strcnCanlender.innerText = DateString +"\n"+ cDateString;//显示! } 要保存一年的信息,其实只要两个信息就可以了:1.农历每个月的大小? |
运行效果图如下:
相关文章
- 魔影工厂怎么转换iPad格式 魔影工厂转iPad教程 01-16
- javascript各种进制转换方法 06-28
- Calendar-Converter公历和农历互转JavaScript插件使用例子 02-03
- javascript中十进制转十六进制代码 05-04
- 字节数最小的中国城市JavaScrip列表(转) 01-18
- 妙用VBScript自制IE工具栏按钮(转) 01-18