因为最近项目需要用js做一个日历控件,所以到网上去搜了一些算法,自己根据这些算法也做了一些优化,今天总结一下,以便日后使用,感谢原作者

//新历日期
var today = new Date();
//年
var year = today.getFullYear()<100 ? today.getFullYear()+1900:today.getFullYear()
//当前月
var month = today.getMonth + 1;
//日
var day = today.getDate();
//DateGL = new Date();//得到农历 年
function CnYearofDate(DateGL){var YYYY=DateGL.getFullYear();var MM=DateGL.getMonth()+1;var CnMM=parseInt(Math.abs(CnDateofDate(DateGL))/100);if(YYYY<100) YYYY+=1900;if(CnMM>MM) YYYY--;YYYY-=1864;return CnEra(YYYY)+"年";
}function CnEra(YYYY){var Tiangan=new Array("甲","乙","丙","丁","戊","己","庚","辛","壬","癸");//var Dizhi=new Array("子(鼠)","丑(牛)","寅(虎)","卯(兔)","辰(龙)","巳(蛇)",//"午(马)","未(羊)","申(猴)","酉(鸡)","戌(狗)","亥(猪)");var Dizhi=new Array("子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥");return Tiangan[YYYY%10]+Dizhi[YYYY%12];
}//得到农历 月
function CnMonthofDate(DateGL){var CnMonthStr=new Array("零","正","二","三","四","五","六","七","八","九","十","冬","腊");var Month;Month = parseInt(CnDateofDate(DateGL)/100);if (Month < 0){return "闰" + CnMonthStr[-Month] + "月";}else{return CnMonthStr[Month] + "月";}
}//得到农历 日
function CnDayofDate(DateGL){var CnDayStr=new Array("零","初一", "初二", "初三", "初四", "初五","初六", "初七", "初八", "初九", "初十","十一", "十二", "十三", "十四", "十五","十六", "十七", "十八", "十九", "二十","廿一", "廿二", "廿三", "廿四", "廿五","廿六", "廿七", "廿八", "廿九", "三十");var Day;Day = (Math.abs(CnDateofDate(DateGL)))%100;return CnDayStr[Day];
}//得到农历节庆
function SolarTerm(DateGL){var SolarTermStr=new Array("小寒","大寒","立春","雨水","惊蛰","春分","清明","谷雨","立夏","小满","芒种","夏至","小暑","大暑","立秋","处暑","白露","秋分","寒露","霜降","立冬","小雪","大雪","冬至");var DifferenceInMonth=new Array(1272060,1275495,1281180,1289445,1299225,1310355,1321560,1333035,1342770,1350855,1356420,1359045,1358580,1355055,1348695,1340040,1329630,1318455,1306935,1297380,1286865,1277730,1274550,1271556);var DifferenceInYear=31556926;var BeginTime=new Date(1901/1/1);BeginTime.setTime(947120460000);for(;DateGL.getFullYear()<BeginTime.getFullYear();){BeginTime.setTime(BeginTime.getTime()-DifferenceInYear*1000);}for(;DateGL.getFullYear()>BeginTime.getFullYear();){BeginTime.setTime(BeginTime.getTime()+DifferenceInYear*1000);}for(var M=0;DateGL.getMonth()>BeginTime.getMonth();M++){BeginTime.setTime(BeginTime.getTime()+DifferenceInMonth[M]*1000);}if(DateGL.getDate()>BeginTime.getDate()){BeginTime.setTime(BeginTime.getTime()+DifferenceInMonth[M]*1000);M++;}if(DateGL.getDate()>BeginTime.getDate()){BeginTime.setTime(BeginTime.getTime()+DifferenceInMonth[M]*1000);M==23?M=0:M++;}var JQ='';if(DateGL.getDate()==BeginTime.getDate()){JQ= SolarTermStr[M] + "";}return JQ;
}function CnDateofDate(DateGL){var CnData=new Array(0x16,0x2a,0xda,0x00,0x83,0x49,0xb6,0x05,0x0e,0x64,0xbb,0x00,0x19,0xb2,0x5b,0x00,0x87,0x6a,0x57,0x04,0x12,0x75,0x2b,0x00,0x1d,0xb6,0x95,0x00,0x8a,0xad,0x55,0x02,0x15,0x55,0xaa,0x00,0x82,0x55,0x6c,0x07,0x0d,0xc9,0x76,0x00,0x17,0x64,0xb7,0x00,0x86,0xe4,0xae,0x05,0x11,0xea,0x56,0x00,0x1b,0x6d,0x2a,0x00,0x88,0x5a,0xaa,0x04,0x14,0xad,0x55,0x00,0x81,0xaa,0xd5,0x09,0x0b,0x52,0xea,0x00,0x16,0xa9,0x6d,0x00,0x84,0xa9,0x5d,0x06,0x0f,0xd4,0xae,0x00,0x1a,0xea,0x4d,0x00,0x87,0xba,0x55,0x04);var CnMonth=new Array();var CnMonthDays=new Array();var CnBeginDay;var LeapMonth;var Bytes=new Array();var I;var CnMonthData;var DaysCount;var CnDaysCount;var ResultMonth;var ResultDay;var yyyy = DateGL.getFullYear();var mm=DateGL.getMonth()+1;var dd=DateGL.getDate();if(yyyy<100) yyyy+=1900;if ((yyyy < 1997) || (yyyy > 2020)){return 0;}Bytes[0] = CnData[(yyyy - 1997) * 4];Bytes[1] = CnData[(yyyy - 1997) * 4 + 1];Bytes[2] = CnData[(yyyy - 1997) * 4 + 2];Bytes[3] = CnData[(yyyy - 1997) * 4 + 3];if ((Bytes[0] & 0x80) != 0) {CnMonth[0] = 12;}else {CnMonth[0] = 11;}CnBeginDay = (Bytes[0] & 0x7f);CnMonthData = Bytes[1];CnMonthData = CnMonthData << 8;CnMonthData = CnMonthData | Bytes[2];LeapMonth = Bytes[3];for (I=15;I>=0;I--){CnMonthDays[15 - I] = 29;if (((1 << I) & CnMonthData) != 0 ){CnMonthDays[15 - I]++;}if (CnMonth[15 - I] == LeapMonth ){CnMonth[15 - I + 1] = - LeapMonth;}else{if (CnMonth[15 - I] < 0 ){CnMonth[15 - I + 1] = - CnMonth[15 - I] + 1;}else {CnMonth[15 - I + 1] = CnMonth[15 - I] + 1;}if (CnMonth[15 - I + 1] > 12 ){ CnMonth[15 - I + 1] = 1;}}}DaysCount = DaysNumberofDate(DateGL) - 1;if (DaysCount <= (CnMonthDays[0] - CnBeginDay)){if ((yyyy > 1901) && (CnDateofDate(new Date((yyyy - 1)+"/12/31")) < 0)){ResultMonth = - CnMonth[0];}else {ResultMonth = CnMonth[0];}ResultDay = CnBeginDay + DaysCount;}else{CnDaysCount = CnMonthDays[0] - CnBeginDay;I = 1;while ((CnDaysCount < DaysCount) && (CnDaysCount + CnMonthDays[I] < DaysCount)){CnDaysCount+= CnMonthDays[I];I++;}ResultMonth = CnMonth[I];ResultDay = DaysCount - CnDaysCount;}if (ResultMonth > 0){return ResultMonth * 100 + ResultDay;}else{return ResultMonth * 100 - ResultDay;}
}
//生肖
//yyyy 年份
function getShengxiao(yyyy){var arr=['猴','鸡','狗','猪','鼠','牛','虎','兔','龙','蛇','马','羊'];return /^\d{4}$/.test(yyyy)?arr[yyyy%12]:null;
} 

目前就总结了这一部份,有空再补充,再次感谢原作者

javascript 日期 新历 农历 生肖 农历节庆 总结相关推荐

  1. php日历类 农历,PHP日期操作类代码-农历-阳历转换、闰年、计算天数等

    这是一个实用的PHP日期时间操作类,里面包括了公历-农历转换.转换成中文日期格式.计算农历相隔天数.根据阴历年获取生肖.获取阴历月份的天数.获取农历每年的天数.获取闰月.计算阴历日期与正月初一相隔的天 ...

  2. PHP日期操作类代码-农历-阳历转换、闰年、计算天数等

    这是一个实用的PHP日期时间操作类,里面包括了公历-农历转换.转换成中文日期格式.计算农历相隔天数.根据阴历年获取生肖.获取阴历月份的天数.获取农历每年的天数.获取闰月.计算阴历日期与正月初一相隔的天 ...

  3. vxe-input vue 日期选择组件带农历节日、小圆点提醒

    vxe-table vxe-input vue 日期选择组件带农历节日.小圆点提醒 默认的日期选择是没有节日信息的 可以通过 festival-method 方法自定义节日信息,接收一个对象,用于渲染 ...

  4. javascript日期比较

    1.比较日期大小 <script> function CompareDate(d1,d2) {    return ((new Date(d1.replace(/-/g,"//& ...

  5. JavaScript 日期格式化 简单有用

    JavaScript 日期格式化 简单有用 代码例如以下,引入jquery后直接后增加下面代码刷新可測试 Date.prototype.Format = function (fmt) { //auth ...

  6. 如何将JavaScript日期转换为UTC?

    假设您网站的用户输入了日期范围. 2009-1-1 to 2009-1-3 您需要将此日期发送到服务器进行某些处理,但是服务器希望所有日期和时间都采用UTC. 现在,假设用户位于阿拉斯加,夏威夷或斐济 ...

  7. swift 时间选择器第三方。公历转农历,农历转公历。

    DFDatePicker. 使用swift5 *支持公元后的任意年的公历和农历,以及公历转农历,农历转公历. *支持农历闰月 *支持年月日时分秒,以及自由组合 *支持选中定位 *轻量化,共一个swif ...

  8. JavaScript日期时间详解

    JavaScript日期时间详解 日期与时间 获取时间对象 var date=new Date() 时间的获取方法 date.toString() date.toLocaleString() date ...

  9. Javascript日期时间表现形式互转

    在一门语言里,一个日期时间一定有3种表现形式,字符串(如2010-11-11 05:07:08),Long型(一般是1970年1月1日至今的毫秒数),内置对象(在Javascript中就是Date): ...

最新文章

  1. [通告]Nuget服务宕机,出现 503 Server Unavailable 错误无法编译及解决方法
  2. 单元测试之更强大的powermock
  3. ac算法 有什么用 Java_AC算法使用例子
  4. 并发模型之——共享内存模型(线程与锁)理论篇
  5. 什么是Github?
  6. php怎么写编辑页面,怎样编辑小程序页面内容?
  7. C++ 多线程下的单例模式
  8. TODO-深度学习实验
  9. Python基础练习-002-求1000以内的完全数
  10. 商品进销差价_零售企业商品进销差价的核算
  11. Win10 官方版下载地址 windows10 1909微软原版光盘镜像下载
  12. 洛谷 2957 [USACO09OCT]谷仓里的回声Barn Echoes
  13. xxx was compiled with optimization - stepping may behave oddly; variables may not be available.
  14. 计算机磁盘网络怎么共享,手机怎么访问电脑共享磁盘
  15. HTTP与HTTPS是啥?
  16. 微信小程序动态获取和设置元素宽高
  17. 嵌入式linux开发板使用pulseaudio连接蓝牙耳机播放音频文件
  18. 2023牛客寒假算法基础集训营1
  19. 8、ZigBee 开发教程之基础篇—CC2530 定时器T3的使用
  20. 阿里专家精心整理分享的Java程序员面试笔试通关宝典PDF

热门文章

  1. Centos7安装无线网卡驱动(No Wi-Fi Adapter Found)
  2. 托管和非托管的区别。
  3. 详解介绍JUnit单元测试框架(完整版)
  4. Ubuntu 安装小狼豪输入法
  5. excel乘法公式怎么输入_你加班3小时做的Excel表格,我只需1分钟!(建议收藏)
  6. 物联网传输技术---LoRa
  7. 若依管理系统RuoYi-Vue(二):权限系统设计详解
  8. Java程序员常用英语词汇
  9. 科大讯飞语音转文字开发(Java代码)
  10. 【转载】SAP连接电脑串口读数(电子称,磅等数据读取)