Javascript农历与公历相互转换的简单实例
如下所示:
/**用法 *Lunar.toSolar(2016,6,3);农历转化公历 *Lunar.toLunar(2016,7,6);公历转化农历 */ varLunar={ MIN_YEAR:1891, MAX_YEAR:2100, lunarInfo:[ [0,2,9,21936],[6,1,30,9656],[0,2,17,9584],[0,2,6,21168],[5,1,26,43344],[0,2,13,59728], [0,2,2,27296],[3,1,22,44368],[0,2,10,43856],[8,1,30,19304],[0,2,19,19168],[0,2,8,42352], [5,1,29,21096],[0,2,16,53856],[0,2,4,55632],[4,1,25,27304],[0,2,13,22176],[0,2,2,39632], [2,1,22,19176],[0,2,10,19168],[6,1,30,42200],[0,2,18,42192],[0,2,6,53840],[5,1,26,54568], [0,2,14,46400],[0,2,3,54944],[2,1,23,38608],[0,2,11,38320],[7,2,1,18872],[0,2,20,18800], [0,2,8,42160],[5,1,28,45656],[0,2,16,27216],[0,2,5,27968],[4,1,24,44456],[0,2,13,11104], [0,2,2,38256],[2,1,23,18808],[0,2,10,18800],[6,1,30,25776],[0,2,17,54432],[0,2,6,59984], [5,1,26,27976],[0,2,14,23248],[0,2,4,11104],[3,1,24,37744],[0,2,11,37600],[7,1,31,51560], [0,2,19,51536],[0,2,8,54432],[6,1,27,55888],[0,2,15,46416],[0,2,5,22176],[4,1,25,43736], [0,2,13,9680],[0,2,2,37584],[2,1,22,51544],[0,2,10,43344],[7,1,29,46248],[0,2,17,27808], [0,2,6,46416],[5,1,27,21928],[0,2,14,19872],[0,2,3,42416],[3,1,24,21176],[0,2,12,21168], [8,1,31,43344],[0,2,18,59728],[0,2,8,27296],[6,1,28,44368],[0,2,15,43856],[0,2,5,19296], [4,1,25,42352],[0,2,13,42352],[0,2,2,21088],[3,1,21,59696],[0,2,9,55632],[7,1,30,23208], [0,2,17,22176],[0,2,6,38608],[5,1,27,19176],[0,2,15,19152],[0,2,3,42192],[4,1,23,53864], [0,2,11,53840],[8,1,31,54568],[0,2,18,46400],[0,2,7,46752],[6,1,28,38608],[0,2,16,38320], [0,2,5,18864],[4,1,25,42168],[0,2,13,42160],[10,2,2,45656],[0,2,20,27216],[0,2,9,27968], [6,1,29,44448],[0,2,17,43872],[0,2,6,38256],[5,1,27,18808],[0,2,15,18800],[0,2,4,25776], [3,1,23,27216],[0,2,10,59984],[8,1,31,27432],[0,2,19,23232],[0,2,7,43872],[5,1,28,37736], [0,2,16,37600],[0,2,5,51552],[4,1,24,54440],[0,2,12,54432],[0,2,1,55888],[2,1,22,23208], [0,2,9,22176],[7,1,29,43736],[0,2,18,9680],[0,2,7,37584],[5,1,26,51544],[0,2,14,43344], [0,2,3,46240],[4,1,23,46416],[0,2,10,44368],[9,1,31,21928],[0,2,19,19360],[0,2,8,42416], [6,1,28,21176],[0,2,16,21168],[0,2,5,43312],[4,1,25,29864],[0,2,12,27296],[0,2,1,44368], [2,1,22,19880],[0,2,10,19296],[6,1,29,42352],[0,2,17,42208],[0,2,6,53856],[5,1,26,59696], [0,2,13,54576],[0,2,3,23200],[3,1,23,27472],[0,2,11,38608],[11,1,31,19176],[0,2,19,19152], [0,2,8,42192],[6,1,28,53848],[0,2,15,53840],[0,2,4,54560],[5,1,24,55968],[0,2,12,46496], [0,2,1,22224],[2,1,22,19160],[0,2,10,18864],[7,1,30,42168],[0,2,17,42160],[0,2,6,43600], [5,1,26,46376],[0,2,14,27936],[0,2,2,44448],[3,1,23,21936],[0,2,11,37744],[8,2,1,18808], [0,2,19,18800],[0,2,8,25776],[6,1,28,27216],[0,2,15,59984],[0,2,4,27424],[4,1,24,43872], [0,2,12,43744],[0,2,2,37600],[3,1,21,51568],[0,2,9,51552],[7,1,29,54440],[0,2,17,54432], [0,2,5,55888],[5,1,26,23208],[0,2,14,22176],[0,2,3,42704],[4,1,23,21224],[0,2,11,21200], [8,1,31,43352],[0,2,19,43344],[0,2,7,46240],[6,1,27,46416],[0,2,15,44368],[0,2,5,21920], [4,1,24,42448],[0,2,12,42416],[0,2,2,21168],[3,1,22,43320],[0,2,9,26928],[7,1,29,29336], [0,2,17,27296],[0,2,6,44368],[5,1,26,19880],[0,2,14,19296],[0,2,3,42352],[4,1,24,21104], [0,2,10,53856],[8,1,30,59696],[0,2,18,54560],[0,2,7,55968],[6,1,27,27472],[0,2,15,22224], [0,2,5,19168],[4,1,25,42216],[0,2,12,42192],[0,2,1,53584],[2,1,21,55592],[0,2,9,54560] ], //是否闰年 isLeapYear:function(year){ return((year%4==0&&year%100!=0)||(year%400==0)); }, //天干地支年 lunarYear:function(year){ vargan=['庚','辛','壬','癸','甲','乙','丙','丁','戊','己'], zhi=['申','酉','戌','亥','子','丑','寅','卯','辰','巳','午','未'], str=year.toString().split(""); returngan[str[3]]+zhi[year%12]; }, //生肖年 zodiacYear:function(year){ varzodiac=['猴','鸡','狗','猪','鼠','牛','虎','兔','龙','蛇','马','羊']; returnzodiac[year%12]; }, //公历月份天数 //@paramyear阳历-年 //@parammonth阳历-月 solarMonthDays:function(year,month){ varFebDays=this.isLeapYear(year)?29:28; varmonthHash=['',31,FebDays,31,30,31,30,31,31,30,31,30,31]; returnmonthHash[month]; }, //农历月份天数 lunarMonthDays:function(year,month){ varmonthData=this.lunarMonths(year); returnmonthData[month-1]; }, //农历月份天数数组 lunarMonths:function(year){ varyearData=this.lunarInfo[year-this.MIN_YEAR]; varleapMonth=yearData[0]; varbit=(+yearData[3]).toString(2); varmonths=[]; for(vari=0;i<bit.length;i++){ months[i]=bit.substr(i,1); } for(vark=0,len=16-months.length;k<len;k++){ months.unshift('0'); } months=months.slice(0,(leapMonth==0?12:13)); for(vari=0;i<months.length;i++){ months[i]=+months[i]+29; } returnmonths; }, //农历每年的天数 //@paramyear农历年份 lunarYearDays:function(year){ varmonthArray=this.lunarYearMonths(year); varlen=monthArray.length; return(monthArray[len-1]==0?monthArray[len-2]:monthArray[len-1]); }, // lunarYearMonths:function(year){ varmonthData=this.lunarMonths(year); varres=[]; vartemp=0; varyearData=this.lunarInfo[year-this.MIN_YEAR]; varlen=(yearData[0]==0?12:13); for(vari=0;i<len;i++){ temp=0; for(j=0;j<=i;j++){ temp+=monthData[j]; } res.push(temp); } returnres; }, //获取闰月 //@paramyear农历年份 leapMonth:function(year){ varyearData=this.lunarInfo[year-this.MIN_YEAR]; returnyearData[0]; }, //计算农历日期与正月初一相隔的天数 betweenLunarDays:function(year,month,day){ varyearMonth=this.lunarMonths(year); varres=0; for(vari=1;i<month;i++){ res+=yearMonth[i-1]; } res+=day-1; returnres; }, //计算2个阳历日期之间的天数 //@paramyear阳历年 //@parammonth //@paramday //@paraml_month阴历正月对应的阳历月份 //@paraml_day阴历初一对应的阳历天 betweenSolarDays:function(year,month,day,l_month,l_day){ vartime1=newDate(year+"-"+month+"-"+day).getTime(), time2=newDate(year+"-"+l_month+"-"+l_day).getTime(); returnMath.ceil((time1-time2)/24/3600/1000); }, //根据距离正月初一的天数计算阴历日期 //@paramyear阳历年 //@parambetween天数 lunarByBetween:function(year,between){ varlunarArray=[],yearMonth=[],t=0,e=0,leapMonth=0,m=''; if(between==0){ t=1; e=1; m='正月'; }else{ year=between>0?year:(year-1); yearMonth=this.lunarYearMonths(year); leapMonth=this.leapMonth(year); between=between>0?between:(this.lunarYearDays(year)+between); for(vari=0;i<13;i++){ if(between==yearMonth[i]){ t=i+2; e=1; break; }elseif(between<yearMonth[i]){ t=i+1; e=between-((yearMonth[i-1])?yearMonth[i-1]:0)+1; break; } } m=(leapMonth!=0&&t==leapMonth+1) ?('闰'.this.chineseMonth(t-1)) :this.chineseMonth(((leapMonth!=0&&leapMonth+1<t)?(t-1):t)); } lunarArray.push(year,t,e);//年月日 lunarArray.push(this.lunarYear(year), this.zodiacYear(year), m, this.chineseNumber(e));//天干地支年生肖年月份日 lunarArray.push(leapMonth);//闰几月 returnlunarArray; }, //中文月份 chineseMonth:function(month){ varmonthHash=['','正月','二月','三月','四月','五月','六月','七月','八月','九月','十月','冬月','腊月']; returnmonthHash[month]; }, //中文日期 chineseNumber:function(num){ vardateHash=['','一','二','三','四','五','六','七','八','九','十']; if(num<=10){ res='初'+dateHash[num]; }elseif(num>10&&num<20){ res='十'+dateHash[num-10]; }elseif(num==20){ res="二十"; }elseif(num>20&&num<30){ res="廿"+dateHash[num-20]; }elseif(num==30){ res="三十"; } returnres; }, //转换农历 toLunar:function(year,month,day){ varyearData=this.lunarInfo[year-this.MIN_YEAR]; if(year==this.MIN_YEAR&&month<=2&&day<=9){ return[1891,1,1,'辛卯','兔','正月','初一']; } returnthis.lunarByBetween(year,this.betweenSolarDays(year,month,day,yearData[1],yearData[2])); }, //转换公历 //@paramyear阴历-年 //@parammonth阴历-月,闰月处理:例如如果当年闰五月,那么第二个五月就传六月,相当于阴历有13个月 //@paramdate阴历-日 toSolar:function(year,month,day){ varyearData=this.lunarInfo[year-this.MIN_YEAR]; varbetween=this.betweenLunarDays(year,month,day); varms=newDate(year+"-"+yearData[1]+"-"+yearData[2]).getTime(); vars=ms+between*24*60*60*1000; vard=newDate(); d.setTime(s); year=d.getFullYear(); month=d.getMonth()+1; day=d.getDate(); return[year,month,day]; } };
以上就是小编为大家带来的Javascript农历与公历相互转换的简单实例全部内容了,希望大家多多支持毛票票~