Web前端农历/阴历转换

废话不多说,直接上农历/阴历转换核心JS代码:

var CalendarData = new Array(20);
var madd = new Array(12);
var TheDate;
var tgString = "甲乙丙丁戊己庚辛壬癸";
var dzString = "子丑寅卯辰巳午未申酉戌亥";
var numString = "一二三四五六七八九十";
var monString = "正二三四五六七八九十冬腊";
var weekString = "日一二三四五六";
var sx = "鼠牛虎兔龙蛇马羊猴鸡狗猪";
var cYear;
var cMonth;
var cDay;
var cHour;
var cDateString;
var DateString;
var Browser = navigator.appName;
function init() {
  CalendarData[0] = 0x41A95; //公元2001年;
  CalendarData[1] = 0xD4A;
  CalendarData[2] = 0xDA5;
  CalendarData[3] = 0x20B55;
  CalendarData[4] = 0x56A;
  CalendarData[5] = 0x7155B;
  CalendarData[6] = 0x25D;
  CalendarData[7] = 0x92D;
  CalendarData[8] = 0x5192B;
  CalendarData[9] = 0xA95;
  CalendarData[10] = 0xB4A;
  CalendarData[11] = 0x416AA;
  CalendarData[12] = 0xAD5;
  CalendarData[13] = 0x90AB5;
  CalendarData[14] = 0x4BA;
  CalendarData[15] = 0xA5B;
  CalendarData[16] = 0x60A57;
  CalendarData[17] = 0x52B;
  CalendarData[18] = 0xA93;
  CalendarData[19] = 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;
} //n月是大月还是小月?
function getInfo() { //用户输入日期!
  var arr = [];
  strData = prompt("请输入年 月 日,并以空格隔开!", "");
  if (strData == null || strData == "") {
    alert("输入错误!请刷新!");
    return false;
  }
  arr = strData.split(" ");
  y = arr[0];
  m = arr[1] - 1;
  d = arr[2];
  TheDate = new Date(y, m, d);
} //getinfo();
function e2c() {
  getInfo();
  var total, m, n, k;
  var isEnd = false;
  var tmp = TheDate.getYear();
  if (tmp < 1900) tmp += 1900; //无用!
  total = (tmp - 2001) * 365 + Math.floor((tmp - 2001) / 4) + madd[TheDate.getMonth()] + TheDate.getDate() - 23; //2001年1月23是除夕;该句计算到起始年正月初一的天数
  if (TheDate.getYear() % 4 == 0 && TheDate.getMonth() > 1) total++; //当年是闰年且已过2月再加一天!
  for (m = 0;; m++) {
    k = (CalendarData[m] < 0xfff) ? 11 : 12; //起始年+m闰月吗?
    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 = 2001 + 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--; //该月是闰月后某个月!
  }
  cHour = Math.floor((TheDate.getHours() + 1) / 2);
}
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);
  if (cHour == 12) tmp += "夜";
  tmp += dzString.charAt((cHour) % 12);
  tmp += "时"; //几时!
  cDateString = tmp;
  return tmp;
}
function GetDateString() //公历时间!
{
  var tmp = "";
  var t1 = TheDate.getYear();
  if (t1 < 1900) t1 += 1900;
  tmp += t1 + "-" + (TheDate.getMonth() + 1) + "-" + TheDate.getDate() + " " + TheDate.getHours() + ":" + ((TheDate.getMinutes() < 10) ? "0": "") + TheDate.getMinutes() + " 星期" + weekString.charAt(TheDate.getDay());
  DateString = tmp;
  return tmp;
}
function cnCanlender() {
  init();
  e2c();
  GetDateString();
  GetcDateString();
  strcnCanlender.innerText = DateString + "\n" + cDateString; //显示!
}

 

如使用JS文件有问题可直接查看前端一键测试代码:

https://download.csdn.net/download/yfr5734/12285007

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值