如下所示:
for (var k = 0,len = 16 - months.length; k < len; k++) {
months.unshift('0');
}
months = months.slice(0,(leapMonth == 0 ? 12 : 13));
for (var i = 0; i < months.length; i++) {
months[i] = +months[i] + 29;
}
return months;
},//农历每年的天数
//@param year 农历年份
lunarYearDays : function(year) {
var monthArray = this.lunarYearMonths(year);
var len = monthArray.length;
return (monthArray[len-1] == 0 ? monthArray[len-2] : monthArray[len-1]);
},//
lunarYearMonths : function(year) {
var monthData = this.lunarMonths(year);
var res = [];
var temp = 0;
var yearData = this.lunarInfo[year - this.MIN_YEAR];
var len = (yearData[0] == 0 ? 12 : 13);
for (var i = 0; i < len; i++) {
temp = 0;
for (j = 0; j <= i; j++) {
temp += monthData[j];
}
res.push(temp);
}
return res;
},//获取闰月
//@param year 农历年份
leapMonth : function(year){
var yearData = this.lunarInfo[year - this.MIN_YEAR];
return yearData[0];
},//计算农历日期与正月初一相隔的天数
betweenLunarDays : function(year,month,day) {
var yearMonth = this.lunarMonths(year);
var res = 0;
for (var i = 1; i < month; i++) {
res += yearMonth[i-1];
}
res += day - 1;
return res;
},//计算2个阳历日期之间的天数
//@param year 阳历年
//@param month
//@param day
//@param l_month 阴历正月对应的阳历月份
//@param l_day 阴历初一对应的阳历天
betweenSolarDays : function(year,day,l_month,l_day) {
var time1 = new Date(year +"-"+ month +"-"+ day).getTime(),time2 = new Date(year +"-"+ l_month +"-"+ l_day).getTime();
return Math.ceil((time1-time2)/24/3600/1000);
},//根据距离正月初一的天数计算阴历日期
//@param year 阳历年
//@param between 天数
lunarByBetween : function(year,between) {
var lunarArray = [],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 (var i = 0; i < 13; i++) {
if (between == yearMonth[i]) {
t = i + 2;
e = 1;
break;
} else if (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); //闰几月
return lunarArray;
},//中文月份
chineseMonth : function(month) {
var monthHash = ['','正月','二月','三月','四月','五月','六月','七月','八月','九月','十月','冬月','腊月'];
return monthHash[month];
},//中文日期
chineseNumber : function(num) {
var dateHash = ['','一','二','三','四','五','六','七','八','九','十'];
if (num <= 10) {
res = '初'+ dateHash[num];
} else if (num > 10 && num < 20) {
res = '十'+ dateHash[num-10];
} else if (num == 20) {
res = "二十";
} else if (num > 20 && num < 30) {
res = "廿"+ dateHash[num-20];
} else if (num == 30) {
res = "三十";
}
return res;
},//转换农历
toLunar : function(year,day) {
var yearData = this.lunarInfo[year - this.MIN_YEAR];
if (year == this.MIN_YEAR && month <= 2 && day <= 9) {
return [1891,'辛卯','初一'];
}
return this.lunarByBetween(year,this.betweenSolarDays(year,yearData[1],yearData[2]));
},//转换公历
//@param year 阴历-年
//@param month 阴历-月,闰月处理:例如如果当年闰五月,那么第二个五月就传六月,相当于阴历有13个月
//@param date 阴历-日
toSolar : function(year,day) {
var yearData = this.lunarInfo[year - this.MIN_YEAR];
var between = this.betweenLunarDays(year,day);
var ms = new Date(year +"-" + yearData[1] +"-"+ yearData[2]).getTime();
var s = ms + between 24 60 60 1000;
var d = new Date();
d.setTime(s);
year = d.getFullYear();
month = d.getMonth() + 1;
day = d.getDate();
return [year,day];
}
};