JS实现带阴历的日历功能详解javascript技巧

工作中要写一个带阴历的日历,自己调研了怎么做日历。

一.表格行数问题

既然要显示日期表格的话,首先得知道这个表格有多少行多少列,列数是已经确定的,从星期天(日历上第1列是星期天)到星期六一共7列。要解决行数问题之前,还得先知道这个月的第1天是星期几,因为每个月的1号并不都是从日历上的星期天开始排的,可能1号是星期五,星期六也说不定,所以1号的左边部分,就得用空表格代替了。那么用多少个空表格代替呢,这里就得用到getDay()方法了,该方法返回数组[0-6]中的一个数字,0代表星期天,1代表星期一,2代表星期二,以此类推。所以如果一个月的1号是星期五的话,那么刚好左边需要5个空表格代替。然后,假如一个月有31天,最后求出的表格行数就是:

vartr_nums=Math.ceil((5+31)/7);当然,并不是每个月都是31天,所以我们得创建一个包含12个月份的数组,每个元素代表每个月份所包含的天数。但是2月份比较特殊,闰年的2月份有29天,平年的2月份只有28天。所以,在创建数组之前,得自己创建一个判断闰年的函数:

vartoday=newDate(),//获取当前日期y=today.getFullYear(),//获取日期中的年份m=today.getMonth(),//获取日期中的月份(需要注意的是:月份是从0开始计算,获取的值比正常月份的值少1)d=today.getDate(),//获取日期中的日(方便在建立日期表格时高亮显示当天)firstday=newDate(y,m,1),//获取当月的第一天dayOfWeek=firstday.getDay(),//判断第一天是星期几(返回[0-6]中的一个,0代表星期天,1代表星期一,以此类推)days_per_month=newArray(31,28+isLeap(y),31,30,31,30,31,31,30,31,30,31),//创建月份数所以最后就可以获取当月所需表格的行数:

varstr_nums=Math.ceil((dayOfWeek+days_per_month[m])/7);//确定日期表格所需的行数完整的js代码:

从小就没搞懂了阴历和阳历中的换算问题,幸运的是从其他牛人那里找到了阴阳历的转换js代码,

/**公历年月日转农历数据返回json**/calendar.solar2lunar(1987,11,01);/**农历年月日转公历年月日**/calendar.lunar2solar(1987,9,10);//调用以上方法后返回类似如下object(json)具体以上就不需要解释了吧!//c开头的是公历各属性值l开头的自然就是农历咯gz开头的就是天干地支纪年的数据啦~{Animal:"兔",IDayCn:"初十",IMonthCn:"九月",Term:null,astro:"天蝎座",cDay:1,cMonth:11,cYear:1987,gzDay:"甲寅",gzMonth:"庚戌",gzYear:"丁卯",isLeap:false,isTerm:false,isToday:false,lDay:10,lMonth:9,lYear:1987,nWeek:7,ncWeek:"星期日"}//该代码还有其他可以调用的方法,请自己查看代码中的详细注释三、效果图

因为工作的源码不能泄露,所以日历的实现代码就不贴出了。但效果图如下:

THE END
1.公历和农历转换算法详解20220701131755.pdf内容提供方:zxj41232 大小:368.33 KB 字数:约2.91万字 发布时间:2022-07-03发布于天津 浏览人气:12 下载次数:仅上传者可见 收藏次数:0 需要金币:*** 金币 (10金币=人民币1元)公历和农历转换算法详解.pdf 关闭预览 想预览更多内容,点击免费在线预览全文 免费在线预览全文 公历和农历转换算法详解 /https://max.book118.com/html/2022/0701/8127004061004114.shtm
2.阳历阴历算法详解:24节气与复杂转换万年历,阳历,农历,24节气 4星· 超过85%的资源需积分: 19180 浏览量更新于2024-10-3112KBTXT 本文将深入探讨万年历算法中的阳历与阴历转换,以及如何计算24节气在两种历法系统中的对应关系。首先,我们关注的是阳历(格里高利历)的算法,这是一种国际上广泛采用的公历系统,以太阳的运行周期为基础,以365天为一年,每四https://wenku.csdn.net/doc/6robi5tk08
3.指标公式农历日期公式详解:计算农历日期与节日的精准指南突破失败后的二次上攻往往是市场转折点的信号。http://m.55188.com/thread-20856339-1-1.html
4.天干地支纪年法详解如:2001年查万年历为辛巳年,算法为: 2001÷10=200…… 1,1—3=— 2,—2+10=8,按天干顺序数到8,甲、乙、丙、丁、戊、己、庚、辛。第8位为辛。 2001÷12=166……9,9—3=6,按地支顺序数到6,子、丑、寅、卯、辰、巳。第6位为巳。 https://www.360doc.cn/article/479061_47124228.html
5.诸葛亮马前课指算法详解诸葛亮马前课指算法详解,诸葛手指掐算法图解 诸葛马前课(指算法): 夜观星象的诸葛孔明莫非就没有估算到此刻有雨?按神算子诸葛亮的智谋,怎么会不知道有雨呢?后代不少文人墨客猜测,晴天浮云突然大雨而至,是因为诸葛亮一生泄露了太多天机。 小六壬的解释旧时占卜法 之一 。以大安、 留连 、速喜、赤口、小吉、空亡http://www.dyzg6688.com/h-pd-j-112-3_1.html
6.春节加班工资怎么算?官方详解300%加班费算法官方详解300%加班费算法 资料图。 中新网记者 李金磊 摄 中新网北京2月11日电 (记者 杜燕)春节假期,加班工资怎么算?北京市人力资源和社会保障局今天表示,2月16日到18日是法定节假日,在这三天里加班的,用人单位应该支付劳动者300%的加班工资;在2月15日、19日、20日和21日这四个调休日加班的,单位要先安排https://news.cctv.com/m/a/index.shtml?id=ARTIMt5yI3I3rNw4y3lbTSsn180211
7.属相是按立春算还是春节算,生肖是以立春为准吗?1、农历算法 以除夕为分界点,也就是我们说的农历新年(大年初一)为起点计算生肖的方法出现比较晚,最早记载出现在北宋,现在很多人比较认同这个。民俗专家们认为,属相不应该按二十四节气来算,毕竟春节是农历新年的开始,也是农历生肖年的开始,属相自然应从正月初一算起。 https://m.smxs.com/nianfen/2023/191204.html
8.称骨算命袁天罡八字称骨算命称骨算命法称骨算命说明:出生在夜11-12点,算第二天;闰月上半月算本月,下半月算下月。如闰五月十四,作五月算;闰五月十六,作六月算。 称骨算命法,相传是唐朝周易大师袁天罡先生所创,其法将人的生辰八字,即出生的农历年月日时计算相应的“骨重”,然后根据“称骨”的总值来进行算命。 https://m.buyiju.com/cgsm/
9.农历的算法是怎么算的农历的算法是怎么算的错过花期 精选回答 农历按照全年的自然日划分为四季、二十四节气和年节。 农历的二十四节气包括:春季的立春、雨水、惊蛮、春分、清明、谷雨;夏季的立夏、小满、芒种、夏至、小暑、大暑;秋季的立秋、处暑、白露、秋分、寒露、霜降;冬季的立冬、小雪、大雪、冬至、小寒、大寒。此外,全年中的https://edu.iask.sina.com.cn/jy/3qDa0bwIqY5.html
10.vba阴历算法51CTO博客已为您找到关于vba阴历算法的相关内容,包含IT学习相关文档代码介绍、相关教程视频课程,以及vba阴历算法问答内容。更多vba阴历算法相关解答可以来51CTO博客参与分享和学习,帮助广大IT技术人实现成长和进步。https://blog.51cto.com/topic/vbayinlisuanfa.html
11.博大精深的农历算法php教程博大精深的 农历算法 /*** Lunar calendar 博大精深的农历* 原始数据和算法思路来自 S&SLab http://www.focus-2000.com 可惜网站好像关了*//*农历每月的天数。每个元素为一年。每个元素中的数据为:[0]是闰月在哪个月,0为无闰月;[1]到[13]是每年12或13个月的每月天数;[14]是当年的天干次序,[15]是https://www.php.cn/php-weizijiaocheng-318541.html
12.农历计算方法所以计算农历需要先找出气朔,计算气朔则需计算太阳和月亮的黄经,现代天文学使用行星历表计算天体位置。python有第三方库提供相关功能,本文提供的算法以PyEphem库为例,利用太阳黄经计算节气,由SolarTerms函数处理,合朔则直接使用库中提供的next_newmoon函数进行计算。 https://www.jianshu.com/p/d3b63ee7492f
13.农历计算方法探秘(农历如何计算)2.置闰法则:农历通过设置闰月来调整月亮和太阳的周期差异。具体方法是:以19年为一个周期,其中12个平年各设12个月,7个闰年各设13个月。闰月的设置是根据天文算法和历法规则确定的,通常在农历的特定年份中插入一个额外的月份。 3.干支纪年:农历还结合了干支纪年法,以10天干和12地支的组合形成一个60年的循环。每https://www.zaixianjisuan.com/jisuanzixun/nonglijisuanfangfatanmi.html