显示阴历(农历)日期的js代码

var CalendarData=new Array(100);
var madd=new Array(12);
var tgString="甲乙丙丁戊己庚辛壬癸";
var dzString="子丑寅卯辰巳午未申酉戌亥";
var numString="一二三四五六七八九十";
var monString="正二三四五六七八九十冬腊";
var weekString="日一二三四五六";
var sx="鼠牛虎兔龙蛇马羊猴鸡狗猪";
var cYear,cMonth,cDay,TheDate;
CalendarData = new Array(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);
madd[0]=0;
madd[1]=31;
madd[2]=59;
madd[3]=90;
madd[4]=120;
madd[5]=151;
madd[6]=181;
madd[7]=212;
madd[8]=243;
madd[9]=273;
madd[10]=304;
madd[11]=334;
 
function GetBit(m,n){
return (m>>n)&1;
}
function e2c(){
TheDate= (arguments.length!=3) ? new Date() : new Date(arguments[0],arguments[1],arguments[2]);
var total,m,n,k;
var isEnd=false;
var tmp=TheDate.getYear();
if(tmp<1900){
 tmp+=1900;
}
total=(tmp-1921)*365+Math.floor((tmp-1921)/4)+madd[TheDate.getMonth()]+TheDate.getDate()-38;
 
if(TheDate.getYear()%4==0&&TheDate.getMonth()>1) {
 total++;
}
for(m=0;;m++){
 k=(CalendarData[m]<0xfff)?11:12;
 for(n=k;n>=0;n--){
if(total<=29+GetBit(CalendarData[m],n)){
 isEnd=true; break;
 }
 total=total-29-GetBit(CalendarData[m],n);
 }
 if(isEnd) break;
}
cYear=1921 + m;
cMonth=k-n+1;
cDay=total;
if(k==12){
 if(cMonth==Math.floor(CalendarData[m]/0x10000)+1){
 cMonth=1-cMonth;
 }
if(cMonth>Math.floor(CalendarData[m]/0x10000)+1){
 cMonth--;
 }
}
}
 
function GetcDateString(){
var tmp="";
tmp+=tgString.charAt((cYear-4)%10);
tmp+=dzString.charAt((cYear-4)%12);
tmp+="(";
tmp+=sx.charAt((cYear-4)%12);
tmp+=")年 ";
if(cMonth<1){
tmp+="(闰)";
tmp+=monString.charAt(-cMonth-1);
}else{
 tmp+=monString.charAt(cMonth-1);
}
tmp+="月";
tmp+=(cDay<11)?"初":((cDay<20)?"十":((cDay<30)?"廿":"三十"));
if (cDay%10!=0||cDay==10){
 tmp+=numString.charAt((cDay-1)%10);
}
return tmp;
}
 
function GetLunarDay(solarYear,solarMonth,solarDay){
//solarYear = solarYear<1900?(1900+solarYear):solarYear;
if(solarYear<1921 || solarYear>2020){
return "";
}else{
 solarMonth = (parseInt(solarMonth)>0) ? (solarMonth-1) : 11;
 e2c(solarYear,solarMonth,solarDay);
 return GetcDateString();
}
}
 
var D=new Date();
var yy=D.getFullYear();
var mm=D.getMonth()+1;
var dd=D.getDate();
var ww=D.getDay();
var ss=parseInt(D.getTime() / 1000);
if (yy<100) yy="19"+yy;
function showCal(){
document.write(GetLunarDay(yy,mm,dd));
}

参考链接:

https://www.jb51.net/article/79440.htm

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是获取一年的农历日期的 JavaScript 代码: ```javascript // 农历数据 var lunarInfo = [ 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 ]; // 获取某年的所有农历日期 function getLunarDates(year) { var lunarDates = []; var start = new Date(year, 0, 1); // 当年的第一天 var end = new Date(year, 11, 31); // 当年的最后一天 var lunarYear = getLunarYear(year); // 当年的农历年份 // 遍历当年每一天 for (var i = start; i <= end; i.setDate(i.getDate() + 1)) { var lunarDate = getLunarDate(i.getFullYear(), i.getMonth() + 1, i.getDate()); // 获取农历日期 var lunarMonth = lunarDate.month; // 农历月份 var lunarDay = lunarDate.day; // 农历日期 // 如果是闰月,则在闰月前面添加一个“闰”字 if (lunarMonth < 0) { lunarMonth = -lunarMonth; lunarDates.push("闰" + lunarMonth + "月" + getLunarDay(lunarDay)); } else { lunarDates.push(lunarMonth + "月" + getLunarDay(lunarDay)); } } return lunarDates; } // 获取某一天的农历日期 function getLunarDate(year, month, day) { var isLeap = false; // 是否是闰月 var leapMonth = 0; // 闰月月份 var offset = (new Date(year, month - 1, day).getTime() - new Date(1900, 0, 31).getTime()) / 86400000; // 计算天数偏移量 // 遍历农历年份的每个月,计算出对应的农历月份和日期 for (var i = 1900; i < 2100 && offset > 0; i++) { var yearDays = getLunarYearDays(i); // 当年的农历天数 offset -= yearDays; // 减去当年的农历天数 if (offset < 0) break; // 计算闰月 leapMonth = getLunarLeapMonth(i); if (leapMonth > 0 && i == leapMonth + 1900) { isLeap = true; yearDays = getLunarLeapMonthDays(i); } // 减去当月的天数 offset -= yearDays; if (offset < 0) break; } // 计算农历月份和日期 var month = i - 1900; var year = isLeap ? "闰" + month : month; var day = offset + yearDays; // 如果是闰月,则 month 取相反数 if (leapMonth == month && isLeap) { month = -month; } return { year: year, month: month, day: day }; } // 获取农历年份 function getLunarYear(year) { var i; var leap = 0; var temp = 0; // 计算从 1900 年到今年的总天数 for (i = 1900; i <= year && temp < 590000; i++) { temp = getLunarYearDays(i); leap = getLunarLeapMonth(i); } // 如果今年有闰月,返回闰月月份,否则返回 0 if (year == i - 1) { return leap; } else { return 0; } } // 获取某年的农历天数 function getLunarYearDays(year) { var i; var sum = 348; for (i = 0x8000; i > 0x8; i >>= 1) { sum += (lunarInfo[year - 1900] & i) ? 1 : 0; } return sum + getLunarLeapMonthDays(year); } // 获取某年的闰月月份,如果没有闰月则返回 0 function getLunarLeapMonth(year) { return lunarInfo[year - 1900] & 0xf; } // 获取某年的闰月天数,如果没有闰月则返回 0 function getLunarLeapMonthDays(year) { if (getLunarLeapMonth(year)) { return (lunarInfo[year - 1900] & 0x10000) ? 30 : 29; } else { return 0; } } // 获取农历日期的中文表示 function getLunarDay(day) { var chineseTen = ["", "十", "二十", "三十"]; var chineseNumber = ["零", "一", "二", "三", "四", "五", "六", "七", "八", "九"]; var ten = parseInt(day / 10); var unit = day % 10; return chineseTen[ten] + chineseNumber[unit]; } ``` 使用方法: ```javascript // 获取今年的所有农历日期 var lunarDates = getLunarDates(new Date().getFullYear()); console.log(lunarDates); // ["1月初一", "1月初二", "1月初三", "1月初四", "1月初五", ...] ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值