導航:首頁 > 源碼編譯 > js的農歷演算法

js的農歷演算法

發布時間:2022-10-28 20:55:55

㈠ 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.干支紀年和十二生肖紀年循環使用;由於它包含節氣十分利於四季劃分,由於它包含月相,所以也十分反映潮汐,日月食等天象和月亮對氣候的影響。

參考資料來源:農歷(中國傳統歷法)-網路



閱讀全文

與js的農歷演算法相關的資料

熱點內容
windows拷貝到linux 瀏覽:751
mdr軟體解壓和別人不一樣 瀏覽:884
單片機串列通信有什麼好處 瀏覽:320
游戲開發程序員書籍 瀏覽:843
pdf中圖片修改 瀏覽:269
匯編編譯後 瀏覽:474
php和java整合 瀏覽:829
js中執行php代碼 瀏覽:442
國產單片機廠商 瀏覽:57
蘋果手機怎麼設置不更新app軟體 瀏覽:284
轉行當程序員如何 瀏覽:493
蘋果id怎麼驗證app 瀏覽:864
查看手機命令 瀏覽:953
抖音反編譯地址 瀏覽:226
如何加密軟體oppoa5 瀏覽:234
java從入門到精通明日科技 瀏覽:96
拆解汽車解壓視頻 瀏覽:598
新版百度雲解壓縮 瀏覽:593
android上下拉刷新 瀏覽:880
centos可執行文件反編譯 瀏覽:839