function calendar(_year, _month, fill){
var inputDate = formateDate(_year,_month);
if(inputDate.error)return inputDate;
var year = inputDate.year;
var month = inputDate.month;
var calendarData = solarCalendar(year,month+1,fill);
for(var i=0;i<calendarData.monthData.length;i++){
var cData = calendarData.monthData[i];
var lunarData = solarToLunar(cData.year,cData.month,cData.day);
extend(calendarData.monthData[i],lunarData);
}
return calendarData;
}...
###Node.js###
var LunarCalendar = require("lunar-calendar");
###浏览器###
`window.LunarCalendar`是一个全局对象,可以全局作用域直接调用。
##方法列表##
###LunarCalendar.calendar(year,month[,fill])###
通过公历获取某月农历数据
####参数说明####
- @param {Number} `year` 公历年 范围[1891-2100]
- @param {Number} `month` 公历月 范围[1-12]
- @param {Boolean} `fill`(可选) 是否填充当月日历首尾日期,设为true时,会在首尾填入上下月数据,自动补全一个7*6阵列数据。(可更美观的打造你的万年历产品)
...function getSolarMonthDays(year, month){
var monthDays = [31,isLeapYear(year)?29:28,31,30,31,30,31,31,30,31,30,31];
return monthDays[month];
}n/a
function lunarToSolar(_year, _month, _day){
var inputDate = formateDate(_year,_month,_day);
if(inputDate.error)return inputDate;
var year = inputDate.year;
var month = inputDate.month;
var day = inputDate.day;
var between = getDaysBetweenZheng(year,month,day); //离正月初一的天数
var yearData = lunarInfo[year-minYear];
var zenMonth = yearData[1];
var zenDay = yearData[2];
var offDate = new Date(year,zenMonth-1,zenDay).getTime() + between * 86400000;
offDate = new Date(offDate);
return {
year : offDate.getFullYear(),
month : offDate.getMonth()+1,
day : offDate.getDate()
};
}...
"lunarDayName": "初二", //农历日中文名
"lunarLeapMonth": 9, //农历闰月所在月份,0表示无闰月
"solarFestival": "", //公历节假日,undefined或‘劳动节’之类
"lunarFestival": "", //农历节假日,undefined或‘除夕’之类
"term": "" //二十四节气名,undefined或‘立春’之类
}
###LunarCalendar.lunarToSolar(year,month,day)###
将农历转换为公历
####参数说明####
- @param {Number} `year` 农历年 范围[1891-2100]
- @param {Number} `month` 农历月 范围[1-13](有闰月情况,比如当前闰9月,10表示闰9月,11表示10月)
- @param {Number} `day` 农历日 范围[1-30]
...function setWorktime(workData){
extend(worktime,workData);
}...
####返回数据####
{
"year": 2014, //公历年
"month": 1, //公历月
"day": 31 //公历日
}
###LunarCalendar.setWorktime(data)###
设置某年的节假日安排信息(类库已内置2013-2014年的数据)
####参数说明####
- @param {Object} `data` 节假日安排信息(以年为key,可设置多年)
- 0:无特殊安排,1:工作,2:放假
**参数data格式如下:**
...function solarCalendar(_year, _month, fill){
var inputDate = formateDate(_year,_month);
if(inputDate.error)return inputDate;
var year = inputDate.year;
var month = inputDate.month;
var firstDate = new Date(year,month,1);
var preMonthDays,preMonthData,nextMonthData;
var res = {
firstDay : firstDate.getDay(), //该月1号星期几
monthDays : getSolarMonthDays(year,month), //该月天数
monthData : []
};
res.monthData = creatLenArr(year,month+1,res.monthDays,1);
if(fill){
if(res.firstDay > 0){ //前补
var preYear = month-1<0 ? year-1 : year;
var preMonth = month-1<0 ? 11 : month-1;
preMonthDays = getSolarMonthDays(preYear,preMonth);
preMonthData = creatLenArr(preYear,preMonth+1,res.firstDay,preMonthDays-res.firstDay+1);
res.monthData = preMonthData.concat(res.monthData);
}
if(7*6 - res.monthData.length!=0){ //后补
var nextYear = month+1>11 ? year+1 : year;
var nextMonth = month+1>11 ? 0 : month+1;
var fillLen = 7*6 - res.monthData.length;
nextMonthData = creatLenArr(nextYear,nextMonth+1,fillLen,1);
res.monthData = res.monthData.concat(nextMonthData);
}
}
return res;
}...
"lunarFestival": "", //农历节假日,undefined或‘除夕’之类
"term": "" //二十四节气名,undefined或‘立春’之类
},
...
]
}
###LunarCalendar.solarCalendar(year,month[,fill])###
获取公历某月日历数据(不带农历信息)
####参数说明####
- @param {Number} `year` 公历年 范围[1-~]公元后
- @param {Number} `month` 公历月 范围[1-12]
- @param {Boolean} `fill`(可选) 是否填充当月日历首尾日期,设为true时,会在首尾填入上下月数据,自动补全一个7*6阵列数据。(可更美观的打造你的万年历产品)
...function solarToLunar(_year, _month, _day){
var inputDate = formateDate(_year,_month,_day,minYear);
if(inputDate.error)return inputDate;
var year = inputDate.year;
var month = inputDate.month;
var day = inputDate.day;
cacheUtil.setCurrent(year);
//立春日期
var term2 = cacheUtil.get('term2') ? cacheUtil.get('term2') : cacheUtil.set('term2',getTerm(year,2));
//二十四节气
var termList = cacheUtil.get('termList') ? cacheUtil.get('termList') : cacheUtil.set('termList',getYearTerm(year));
var firstTerm = getTerm(year,month*2); //某月第一个节气开始日期
var GanZhiYear = (month>1 || month==1 && day>=term2) ? year+1 : year;//干支所在年份
var GanZhiMonth = day>=firstTerm ? month+1 : month; //干支所在月份(以节气为界)
var lunarDate = getLunarByBetween(year,month,day);
var lunarLeapMonth = getLunarLeapYear(lunarDate[0]);
var lunarMonthName = '';
if(lunarLeapMonth>0 && lunarLeapMonth==lunarDate[1]){
lunarMonthName = '闰'+DATA.monthCn[lunarDate[1]-1]+'月';
}else if(lunarLeapMonth>0 && lunarDate[1]>lunarLeapMonth){
lunarMonthName = DATA.monthCn[lunarDate[1]-1]+'月';
}else{
lunarMonthName = DATA.monthCn[lunarDate[1]]+'月';
}
//农历节日判断
var lunarFtv = '';
var lunarMonthDays = getLunarYearDays(lunarDate[0]).monthDays;
//除夕
if(lunarDate[1] == lunarMonthDays.length-1 && lunarDate[2]==lunarMonthDays[lunarMonthDays.length-1]){
lunarFtv = lunarFestival['d0100'];
}else if(lunarLeapMonth>0 && lunarDate[1]>lunarLeapMonth){
lunarFtv = lunarFestival[formateDayD4(lunarDate[1]-1,lunarDate[2])];
}else{
lunarFtv = lunarFestival[formateDayD4(lunarDate[1],lunarDate[2])];
}
var res = {
zodiac : getYearZodiac(GanZhiYear),
GanZhiYear : getLunarYearName(GanZhiYear),
GanZhiMonth : getLunarMonthName(year,GanZhiMonth),
GanZhiDay : getLunarDayName(year,month,day),
//放假安排:0无特殊安排,1工作,2放假
worktime : worktime['y'+year] && worktime['y'+year][formateDayD4(month,day)] ? worktime['y'+year][formateDayD4(month,day)] :
0,
term : termList[formateDayD4(month,day)],
lunarYear : lunarDate[0],
lunarMonth : lunarDate[1]+1,
lunarDay : lunarDate[2],
lunarMonthName : lunarMonthName,
lunarDayName : DATA.dateCn[lunarDate[2]-1],
lunarLeapMonth : lunarLeapMonth,
solarFestival : solarFestival[formateDayD4(month,day)],
lunarFestival : lunarFtv
};
return res;
}...
"month": 2, //公历月
"day": 1 //公历日
},
...
]
}
###LunarCalendar.solarToLunar(year,month,day)###
将公历转换为农历
####参数说明####
- @param {Number} `year` 公历年 范围[1891-2100]
- @param {Number} `month` 公历月 范围[1-12]
- @param {Number} `day` 公历日 范围[1-31]
...