㈠ JS获取农历日期的原理是什么,有人能解释下吗
有国际化、皮肤 和一些配置的文件,这些文件会互相调用,不能单独工作,你页面上的写法是正确的,我想应该是js类库缺少文件或者是文件的相对位置被改变了。
㈡ 有谁知道js的农历算法是怎么写出来的
其实我也不懂这个算法,网上粘贴的,我觉得可以不去深究这个公式,反正有现成代码:
设:公元年数-1977(或1901)=4Q+R
则:阴历日期=14Q+10.6(R+1)+年内日期序数-29.5n
(注:式中Q、R、n均为自然数,R<4)
例:1994年5月7日的阴历日期为:
1994-1977=17=4×4+1
故:Q=4,R=1 则:5月7日的阴历日期为:
14×4+10.6(1+1)+(31+28+31+30+7)-29.5n
=204.2- 29.5n
然后用29.5去除204.2得商数6......27.2,6即是n值,余数27即是阴历二十七日。
㈢ 公历转阴历的javascript代码
you are making a "School Work?"
IF you do,i won't give you.
and if not, check out www.javaworld.com
㈣ 求js详细时间代码,年月日星期时分(秒),阴历日期
function RunGLNL(){ var today=new Date(); var d=new Array("星期日","星期一","星期二","星期三","星期四","星期五","星期六"); var DDDD=(today.getYear()<100 ? today.getYear()+1900:today.getYear())+"年"+(today.getMonth()+1)+"月"+today.getDate()+"日"; DDDD = DDDD + " " + d[today.getDay()]; DDDD = DDDD+ " " + (CnDateofDateStr(today)); //DDDD = DDDD+ " " + SolarTerm(today); document.write(DDDD); } function DaysNumberofDate(DateGL){ return parseInt((Date.parse(DateGL)-Date.parse(DateGL.getYear()+"/1/1"))/86400000)+1; } function CnDateofDate(DateGL){ var CnData=new Array( 0x16,0x2a,0xda,0x00,0x83,0x49,0xb6,0x05,0x0e,0x64,0xbb,0x00,0x19,0xb2,0x5b,0x00, 0x87,0x6a,0x57,0x04,0x12,0x75,0x2b,0x00,0x1d,0xb6,0x95,0x00,0x8a,0xad,0x55,0x02, 0x15,0x55,0xaa,0x00,0x82,0x55,0x6c,0x07,0x0d,0xc9,0x76,0x00,0x17,0x64,0xb7,0x00, 0x86,0xe4,0xae,0x05,0x11,0xea,0x56,0x00,0x1b,0x6d,0x2a,0x00,0x88,0x5a,0xaa,0x04, 0x14,0xad,0x55,0x00,0x81,0xaa,0xd5,0x09,0x0b,0x52,0xea,0x00,0x16,0xa9,0x6d,0x00, 0x84,0xa9,0x5d,0x06,0x0f,0xd4,0xae,0x00,0x1a,0xea,0x4d,0x00,0x87,0xba,0x55,0x04 ); var CnMonth=new Array(); var CnMonthDays=new Array(); var CnBeginDay; var LeapMonth; var Bytes=new Array(); var I; var CnMonthData; var DaysCount; var CnDaysCount; var ResultMonth; var ResultDay; var yyyy=DateGL.getYear(); var mm=DateGL.getMonth()+1; var dd=DateGL.getDate(); if(yyyy<100) yyyy+=1900; if ((yyyy < 1997) || (yyyy > 2020)){ return 0; } Bytes[0] = CnData[(yyyy - 1997) * 4]; Bytes[1] = CnData[(yyyy - 1997) * 4 + 1]; Bytes[2] = CnData[(yyyy - 1997) * 4 + 2]; Bytes[3] = CnData[(yyyy - 1997) * 4 + 3]; if ((Bytes[0] & 0x80) != 0) {CnMonth[0] = 12;} else {CnMonth[0] = 11;} CnBeginDay = (Bytes[0] & 0x7f); CnMonthData = Bytes[1]; CnMonthData = CnMonthData << 8; CnMonthData = CnMonthData | Bytes[2]; LeapMonth = Bytes[3]; for (I=15;I>=0;I--){ CnMonthDays[15 - I] = 29; if (((1 << I) & CnMonthData) != 0 ){ CnMonthDays[15 - I]++;} if (CnMonth[15 - I] == LeapMonth ){ CnMonth[15 - I + 1] = - LeapMonth;} else{ if (CnMonth[15 - I] < 0 ){CnMonth[15 - I + 1] = - CnMonth[15 - I] + 1;} else {CnMonth[15 - I + 1] = CnMonth[15 - I] + 1;} if (CnMonth[15 - I + 1] > 12 ){ CnMonth[15 - I + 1] = 1;} } } DaysCount = DaysNumberofDate(DateGL) - 1; if (DaysCount <= (CnMonthDays[0] - CnBeginDay)){ if ((yyyy > 1901) && (CnDateofDate(new Date((yyyy - 1)+"/12/31")) < 0)){ ResultMonth = - CnMonth[0];} else {ResultMonth = CnMonth[0];} ResultDay = CnBeginDay + DaysCount; } else{ CnDaysCount = CnMonthDays[0] - CnBeginDay; I = 1; while ((CnDaysCount < DaysCount) && (CnDaysCount + CnMonthDays[I] < DaysCount)){ CnDaysCount+= CnMonthDays[I]; I++; } ResultMonth = CnMonth[I]; ResultDay = DaysCount - CnDaysCount; } if (ResultMonth > 0){ return ResultMonth * 100 + ResultDay;} else{return ResultMonth * 100 - ResultDay;} } function CnYearofDate(DateGL){ var YYYY=DateGL.getYear(); var MM=DateGL.getMonth()+1; var CnMM=parseInt(Math.abs(CnDateofDate(DateGL))/100); if(YYYY<100) YYYY+=1900; if(CnMM>MM) YYYY--; YYYY-=1864; return CnEra(YYYY)+"年"; } function CnMonthofDate(DateGL){ var CnMonthStr=new Array("零","正","二","三","四","五","六","七","八","九","十","十一","腊"); var Month; Month = parseInt(CnDateofDate(DateGL)/100); if (Month < 0){return "闰" + CnMonthStr[-Month] + "月";} else{return CnMonthStr[Month] + "月";} } function CnDayofDate(DateGL){ var CnDayStr=new Array("零", "初一", "初二", "初三", "初四", "初五", "初六", "初七", "初八", "初九", "初十", "十一", "十二", "十三", "十四", "十五", "十六", "十七", "十八", "十九", "二十", "廿一", "廿二", "廿三", "廿四", "廿五", "廿六", "廿七", "廿八", "廿九", "三十"); var Day; Day = (Math.abs(CnDateofDate(DateGL)))%100; return CnDayStr[Day]; } function DaysNumberofMonth(DateGL){ var MM1=DateGL.getYear(); MM1<100 ? MM1+=1900:MM1; var MM2=MM1; MM1+="/"+(DateGL.getMonth()+1); MM2+="/"+(DateGL.getMonth()+2); MM1+="/1"; MM2+="/1"; return parseInt((Date.parse(MM2)-Date.parse(MM1))/86400000); } function CnEra(YYYY){ var Tiangan=new Array("甲","乙","丙","丁","戊","己","庚","辛","壬","癸"); //var Di=new Array("子(鼠)","丑(牛)","寅(虎)","卯(兔)","辰(龙)","巳(蛇)", //"午(马)","未(羊)","申(猴)","酉(鸡)","戌(狗)","亥(猪)"); var Di=new Array("子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥"); return Tiangan[YYYY%10]+Di[YYYY%12]; } function CnDateofDateStr(DateGL){ if(CnMonthofDate(DateGL)=="零月") return " 请调整您的计算机日期!"; else return "农历:"+CnYearofDate(DateGL)+ " " + CnMonthofDate(DateGL) + CnDayofDate(DateGL); } function SolarTerm(DateGL){ var SolarTermStr=new Array( "小寒","大寒","立春","雨水","惊蛰","春分", "清明","谷雨","立夏","小满","芒种","夏至", "小暑","大暑","立秋","处暑","白露","秋分", "寒露","霜降","立冬","小雪","大雪","冬至"); var DifferenceInMonth=new Array( 1272060,1275495,1281180,1289445,1299225,1310355, 1321560,1333035,1342770,1350855,1356420,1359045, 1358580,1355055,1348695,1340040,1329630,1318455, 1306935,1297380,1286865,1277730,1274550,1271556); var DifferenceInYear=31556926; var BeginTime=new Date(1901/1/1); BeginTime.setTime(947120460000); for(;DateGL.getYear()<BeginTime.getYear();){ BeginTime.setTime(BeginTime.getTime()-DifferenceInYear*1000); } for(;DateGL.getYear()>BeginTime.getYear();){ BeginTime.setTime(BeginTime.getTime()+DifferenceInYear*1000); } for(var M=0;DateGL.getMonth()>BeginTime.getMonth();M++){ BeginTime.setTime(BeginTime.getTime()+DifferenceInMonth[M]*1000); } if(DateGL.getDate()>BeginTime.getDate()){ BeginTime.setTime(BeginTime.getTime()+DifferenceInMonth[M]*1000); M++; } if(DateGL.getDate()>BeginTime.getDate()){ BeginTime.setTime(BeginTime.getTime()+DifferenceInMonth[M]*1000); M==23?M=0:M++; } var JQ; if(DateGL.getDate()==BeginTime.getDate()){ JQ=" 今天是<font color='#FF9999'><b>"+SolarTermStr[M] + "</b></font>"; } else if(DateGL.getDate()==BeginTime.getDate()-1){ JQ=" 明天是<font color='#FF9999'><b>"+SolarTermStr[M] + "</b></font>"; } else if(DateGL.getDate()==BeginTime.getDate()-2){ JQ=" 后天是<font color='#FF9999'><b>"+SolarTermStr[M] + "</b></font>"; } else{ JQ=" " if(DateGL.getMonth()==BeginTime.getMonth()){ JQ+=" 本月"; } else{ JQ+=" 下月"; } JQ+=BeginTime.getDate()+"日"+"<font color='#FF9999'><b>"+SolarTermStr[M]+"</b></font>"; } return JQ; } function CAL() {} RunGLNL(); 详细出处参考: http://www.jb51.net/article/17021.htm
㈤ 用js实现 离当前时间最近的节日的涵数,如果能用给追加分数。
js代码扩展:
//定义24节气
Calendar.solarTerm = new Array("小寒","大寒","立春","雨水","惊蛰","春分","清明","谷雨","立夏","小满","芒种","夏至","小暑","大暑","立秋", "处暑","白露","秋分","寒露","霜降", "立冬","小雪","大雪","冬至")
//定义阴历节日
Calendar.lFtv = new Array("0101*春节","0115 元宵节", "0505 端午节","0707 七夕情人节","0715 中元节","0815 中秋节","0909 重阳节","1208 腊八节","1224 小年","1230*除夕")
//定义阳历节日
Calendar.sFtv = new Array("0101*元旦","0214 情人节","0308 妇女节","0312 植树节","0315 消费者权益日","0401 愚人节","0501 劳动节","0504 青年节","0512 护士节","0601 儿童节","0929 吴潇的生日","0701 建党节 香港回归纪念","0801 建军节","0808 父亲节","0909 毛席逝世纪念","0910 教师节","0928 孔子诞辰","1001*国庆节","1006 老人节","1024 联合国日","1112 孙中山诞辰","1220 澳门回归纪念","1225 圣诞节","1226 毛席诞辰")
//定义阴历日期对象
/*
完成阴历日期类型对象的定义
算出农历, 传入日期传回农历日期物件
该物件属性有 .year .month .day .isLeap .yearCyl .dayCyl .monCyl
*/
function DateLunar(objDate) {
var i, leap=0, temp=0
var baseDate = new Date(1900,0,31)
var offset = (objDate - baseDate)/86400000
this.objDate = objDate;
this.dayCyl = offset + 40
this.monCyl = 14
for(i=1900; i<2050 && offset>0; i++) {
temp = this.lYearDays(i);
offset -= temp
this.monCyl += 12
}
if(offset<0) {
offset += temp;
i--;
this.monCyl -= 12
}
this.year = i
this.yearCyl = i-1864
leap = this.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 = this.leapDays(this.year);
} else {
temp = this.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
}
DateLunar.prototype.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)
DateLunar.prototype.Animals=new Array("鼠","牛","虎","兔","龙","蛇","马","羊","猴","鸡","狗","猪");
DateLunar.prototype.Gan=new Array("甲","乙","丙","丁","戊","己","庚","辛","壬","癸");
DateLunar.prototype.Zhi=new Array("子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥");
//==== 传回农历 y年的总天数
DateLunar.prototype.lYearDays = function (y){
//alert("y = " + y)
var i, sum = 348
for(i=0x8000; i>0x8; i>>=1) sum += (this.lunarInfo[y-1900] & i)? 1: 0
return(sum + this.leapDays(y))
}
//==== 传回农历 y年闰月的天数
DateLunar.prototype.leapDays = function (y){
if(this.leapMonth(y))
return((this.lunarInfo[y-1900] & 0x10000)? 30: 29)
else return(0)
}
//==== 传回农历 y年闰哪个月 1-12 , 没闰传回 0
DateLunar.prototype.leapMonth = function (y){
return(this.lunarInfo[y-1900] & 0xf)
}
//==== 传回农历 y年m月的总天数
DateLunar.prototype.monthDays = function (y,m) {
return((this.lunarInfo[y-1900] & (0x10000>>m))? 30: 29 )
}
//==== 传入 offset 传回干支, 0=甲子
DateLunar.prototype.cyclical = function () {
//var num = this.objDate.getYear() -1900 + 36
var num = this.year -1900 + 36;
return(this.Gan[num%10]+ this.Zhi[num%12])
}
/** Returns the month of the day to chinese description.......... */
DateLunar.prototype.chinaDate = function () {
var nStr1 = new Array('日','一','二','三','四','五','六','七','八','九','十');
var nStr2 = new Array('初','十','廿','卅',' ');
var lunarMonth = this.month;
var lunarday = this.day;
var s;
if (lunarMonth>10){s = '十'+nStr1[lunarMonth-10]} else {s = nStr1[lunarMonth]} s += '月'
switch (lunarday) {
case 10:s += '初十'; break;
case 20:s += '二十'; break;
case 30:s += '三十'; break;
default:s += nStr2[Math.floor(lunarday/10)]; s += nStr1[lunarday%10];
}
return(s);
}
DateLunar.prototype.print = function () {
var cl = '<font color="green" STYLE="font-size:9pt;">阴历:';
//农历BB'+(cld[d].isLeap?'闰 ':' ')+cld[d].lMonth+' 月 '+cld[d].lDay+' 日
var tt = this.cyclical()+'年 '+this.chinaDate();
return(cl+tt+'</font>');
}
//继承日期对象构件,实现阴历日期的算法和节假日的获取算法
Date.prototype.getDateLunar = function() {
var d = new Date(this.getFullYear(), this.getMonth(), this.getDate(), 0, 0, 0);
return new DateLunar(d);
};
Date.prototype.DateLunarPrint = function() {
var DateLunar = this.getDateLunar();
return DateLunar.print();
};
Date.prototype.FestivalPrint = function() {
var objDate = new Date(this.getFullYear(), this.getMonth(), this.getDate(), 0, 0, 0);
var objDateLunar = this.getDateLunar();
var iYear = objDate.getYear();
var iMonth = objDate.getMonth();
var iDate = objDate.getDate();
var sTermInfo = new Array
(0,21208,42467,63836,85337,107014,128867,
150921,173149,195551,218072,240693,263343,
285989,308563,331033,353350,375494,397447,
419210,440795,462224,483532,504758)
var solarTerm = Calendar.solarTerm;
var lFtv = Calendar.lFtv;
var sFtv =Calendar.sFtv;
var lDPOS = new Array(3)
var festival='',solarTerms='',solarFestival='',lunarFestival='',tmp1,tmp2;
//农历节日
for(i in lFtv)
if(lFtv[i].match(/^(\d{2})(.{2})([\s\*])(.+)$/)) {
tmp1=Number(RegExp.$1)-objDateLunar.month
tmp2=Number(RegExp.$2)-objDateLunar.day
if(tmp1==0 && tmp2==0) lunarFestival=RegExp.$4
}
//国历节日
for(i in sFtv)
if(sFtv[i].match(/^(\d{2})(\d{2})([\s\*])(.+)$/)){
tmp1=Number(RegExp.$1)-(iMonth+1)
tmp2=Number(RegExp.$2)-iDate
if(tmp1==0 && tmp2==0) solarFestival = RegExp.$4
}
//节气
tmp1 = new Date((31556925974.7*(iYear-1900)+sTermInfo[iMonth*2+1]*60000)+Date.UTC(1900,0,6,2,5))
tmp2 = tmp1.getUTCDate()
if (tmp2==iDate) solarTerms = solarTerm[iMonth*2+1]
tmp1 = new Date((31556925974.7*(iYear-1900)+sTermInfo[iMonth*2]*60000)+Date.UTC(1900,0,6,2,5))
tmp2= tmp1.getUTCDate()
if (tmp2==iDate) solarTerms = solarTerm[iMonth*2]
if(solarTerms == '' && solarFestival == '' && lunarFestival == '')
festival = '';
else
festival = '<br><b>今天是:'+solarTerms + ' ' + solarFestival + ' ' + lunarFestival+'</b>';
var cl = '<font color="#FF33FF" STYLE="font-size:9pt;">';
return(cl+festival+'</font>');
};
calendar.js函数的修改 重写Calendar.dayMouseOver函数
Calendar.dayMouseOver = function(ev) {
var el = Calendar.getElement(ev);
if (Calendar.isRelated(el, ev) || Calendar._C || el.disabled) {
return false;
}
if (el.ttip) {
if (el.ttip.substr(0, 1) == "_") {
//-----------------------------------
el.ttip = el.caldate.print(el.calendar.ttDateFormat) + el.ttip.substr(1);
//add chinese DateLunar Print..
el.ttip = el.ttip + "<br>"+ el.caldate.DateLunarPrint();
//add print out all festivals the calender defined.
el.ttip = el.ttip + el.caldate.FestivalPrint();
}
el.calendar.tooltips.innerHTML = el.ttip;
}
if (el.navtype != 300) {
Calendar.addClass(el, "hilite");
if (el.caldate) {
Calendar.addClass(el.parentNode, "rowhilite");
}
}
return Calendar.stopEvent(ev
取数作比较
㈥ javascript阳历转阴历方法
我这里刚好有这个算法代码,请看:
varLunarDate={
madd:newArray(0,31,59,90,120,151,181,212,243,273,304,334),
HsString:'甲乙丙丁戊己庚辛壬癸',
EbString:'子丑寅卯辰巳午未申酉戌亥',
NumString:"一二三四五六七八九十",
MonString:"正二三四五六七八九十冬腊",
CalendarData:newArray(0xA4B,0x5164B,0x6A5,0x6D4,0x415B5,0x2B6,0x957,0x2092F,0x497,0x60C96,0xD4A,0xEA5,0x50DA9,0x5AD,0x2B6,0x3126E,0x92E,0x7192D,0xC95,0xD4A,0x61B4A,0xB55,0x56A,0x4155B,0x25D,0x92D,0x2192B,0xA95,0x71695,0x6CA,0xB55,0x50AB5,0x4DA,0xA5B,0x30A57,0x52B,0x8152A,0xE95,0x6AA,0x615AA,0xAB5,0x4B6,0x414AE,0xA57,0x526,0x31D26,0xD95,0x70B55,0x56A,0x96D,0x5095D,0x4AD,0xA4D,0x41A4D,0xD25,0x81AA5,0xB54,0xB6A,0x612DA,0x95B,0x49B,0x41497,0xA4B,0xA164B,0x6A5,0x6D4,0x615B4,0xAB6,0x957,0x5092F,0x497,0x64B,0x30D4A,0xEA5,0x80D65,0x5AC,0xAB6,0x5126D,0x92E,0xC96,0x41A95,0xD4A,0xDA5,0x20B55,0x56A,0x7155B,0x25D,0x92D,0x5192B,0xA95,0xB4A,0x416AA,0xAD5,0x90AB5,0x4BA,0xA5B,0x60A57,0x52B,0xA93,0x40E95),
Year:null,
Month:null,
Day:null,
TheDate:null,
GetBit:function(m,n){
return(m>>n)&1;
},
e2c:function(){
this.TheDate=(arguments.length!=3)?newDate():newDate(arguments[0],arguments[1],arguments[2]);
vartotal,m,n,k;
varisEnd=false;
vartmp=this.TheDate.getFullYear();
total=(tmp-1921)*365+Math.floor((tmp-1921)/4)+this.madd[this.TheDate.getMonth()]+this.TheDate.getDate()-38;
if(this.TheDate.getYear()%4==0&&this.TheDate.getMonth()>1){
total++;
}
for(m=0;;m++){
k=(this.CalendarData[m]<0xfff)?11:12;
for(n=k;n>=0;n--){
if(total<=29+this.GetBit(this.CalendarData[m],n)){
isEnd=true;
break;
}
total=total-29-this.GetBit(this.CalendarData[m],n);
}
if(isEnd)
break;
}
this.Year=1921+m;
this.Month=k-n+1;
this.Day=total;
if(k==12){
if(this.Month==Math.floor(this.CalendarData[m]/0x10000)+1){
this.Month=1-this.Month;
}
if(this.Month>Math.floor(this.CalendarData[m]/0x10000)+1){
this.Month--;
}
}
},
GetcDateString:function(){
vartmp="";
tmp+=this.HsString.charAt((this.Year-4)%10);
tmp+=this.EbString.charAt((this.Year-4)%12);
tmp+="年";
if(this.Month<1){
tmp+="(闰)";
tmp+=this.MonString.charAt(-this.Month-1);
}else{
tmp+=this.MonString.charAt(this.Month-1);
}
tmp+="月";
tmp+=(this.Day<11)?"初":((this.Day<20)?"十":((this.Day<30)?"廿":"三十"));
if(this.Day%10!=0||this.Day==10){
tmp+=this.NumString.charAt((this.Day-1)%10);
}
returntmp;
},
GetLunarDay:function(solarYear,solarMonth,solarDay){
if(solarYear<1921||solarYear>2020){
return"";
}else{
solarMonth=(parseInt(solarMonth)>0)?(solarMonth-1):11;
this.e2c(solarYear,solarMonth,solarDay);
returnthis.GetcDateString();
}
}
};
调用代码示例:
window.onload=function(){
document.write('2014-04-01农历'+LunarDate.GetLunarDay(2014,4,1));
};
结果输出:
2014-04-01 农历甲午年 三月初二
㈦ 农历的算法是怎么算的
农历一年为12或13个月,每个月天数依照月亮围绕地球运行周期而定,为29或30天,闰年为13个月,中国农历年平年为353或354天,闰年为384或385天,平均每年约为365.2422天(即地球环绕太阳一周的时间)。
农历基本上以19年为一周期,由于农历一年约为355日,与地球年相差约11日左右,所以每3年要置一闰月,每19年要置7个闰月。有闰月的年份也叫闰年,具体闰哪个月,则要视节气情况灵活而定。如公历的2001年5月27日、1982年5月27日和1963年5月27日这个日子,都是闰四月初五。
闰月加到哪个月,以农历历法规则推断,主要依照与农历的二十四节气相符合来确定。自冬至开始,逢单数为节气,逢双数为中气,如轮到一个月只有节气没有中气,即为上一个月的闰月。农历的闰月天数与正常月份天数一样,为29或30天。
(7)js的农历算法扩展阅读:
农历的优点:
1.农历是定历,它具有天文年历的特性,能很好地和各种天象对应,如它的节气严格对应太阳高度,历日较严格地对应月相,闰月的不发生频率和发生频率对应地球近日点和远日点,其它天象如日出日没,晨昏蒙影,五星方位,日月食,潮汐等,就连历月也大致对应太阳高度;
2.农历历月的天数只有29日和30日两种,且由定朔日规定,人为因素最小,不易随意改动;
3.岁首有较强的天文学意义,具有阴月阳年的天文学意义;
4.阴阳合历,最体现汉民族天人合一、阴阳和谐的传统文化;
5.干支纪年和十二生肖纪年循环使用;由于它包含节气十分利于四季划分,由于它包含月相,所以也十分反映潮汐,日月食等天象和月亮对气候的影响。
参考资料来源:农历(中国传统历法)-网络