代码思路在下面这个博客,我这里只是记录一下我是怎么在uniapp里使用的

原生js实现公历转农历_xm2by的博客-CSDN博客_javascript 农历原生js实现公历转农历参考文献:[1] 1900年至2100年公历、农历互转Js代码https://blog.csdn.net/XuM222222/article/details/82022345

第一步 找到资料

点击我提供原文链接,滑倒最底下,点击github链接

第二步 复制生成lunar.js

全选赋值,然后放在你的uniapp项目里专门放工具型js的文件夹里

我是因为微信小程序主包只能2M,所以采取了分包,放在分包的lib文件夹

第三步 改写lunar.js

改写lunar.js,使其方法能被import

改写很简单,只需要在最底部,加上下面这个代码就好了,即,就是每一个function,都能被export

export default {sloarToLunar,hasLeapMonth,leapMonthDays,lunarYearDays,lunarYearMonths,getTianGan,getDiZhi
};

第四步  使用sloarToLunar,实现公历转农历

import lunarUtil from './lib/lunar.js';export default {data() {return {calendarData: '',},}},onShow() {const date = new Date()let lunar = lunarUtil.sloarToLunar(date.getFullYear(), date.getMonth() + 1, date.getDate())this.calendarData = lunar.lunarMonth + "月" + lunar.lunarDay + " " + lunar.lunarYear + "年"}
}

第五步 效果

附件

/* 公历转农历代码思路:
1、建立农历年份查询表
2、计算输入公历日期与公历基准的相差天数
3、从农历基准开始遍历农历查询表,计算自农历基准之后每一年的天数,并用相差天数依次相减,确定农历年份
4、利用剩余相差天数以及农历每个月的天数确定农历月份
5、利用剩余相差天数确定农历哪一天 */// 农历1949-2100年查询表
let lunarYearArr = [0x0b557, //19490x06ca0, 0x0b550, 0x15355, 0x04da0, 0x0a5b0, 0x14573, 0x052b0, 0x0a9a8, 0x0e950, 0x06aa0, //1950-19590x0aea6, 0x0ab50, 0x04b60, 0x0aae4, 0x0a570, 0x05260, 0x0f263, 0x0d950, 0x05b57, 0x056a0, //1960-19690x096d0, 0x04dd5, 0x04ad0, 0x0a4d0, 0x0d4d4, 0x0d250, 0x0d558, 0x0b540, 0x0b6a0, 0x195a6, //1970-19790x095b0, 0x049b0, 0x0a974, 0x0a4b0, 0x0b27a, 0x06a50, 0x06d40, 0x0af46, 0x0ab60, 0x09570, //1980-19890x04af5, 0x04970, 0x064b0, 0x074a3, 0x0ea50, 0x06b58, 0x055c0, 0x0ab60, 0x096d5, 0x092e0, //1990-19990x0c960, 0x0d954, 0x0d4a0, 0x0da50, 0x07552, 0x056a0, 0x0abb7, 0x025d0, 0x092d0, 0x0cab5, //2000-20090x0a950, 0x0b4a0, 0x0baa4, 0x0ad50, 0x055d9, 0x04ba0, 0x0a5b0, 0x15176, 0x052b0, 0x0a930, //2010-20190x07954, 0x06aa0, 0x0ad50, 0x05b52, 0x04b60, 0x0a6e6, 0x0a4e0, 0x0d260, 0x0ea65, 0x0d530, //2020-20290x05aa0, 0x076a3, 0x096d0, 0x04afb, 0x04ad0, 0x0a4d0, 0x1d0b6, 0x0d250, 0x0d520, 0x0dd45, //2030-20390x0b5a0, 0x056d0, 0x055b2, 0x049b0, 0x0a577, 0x0a4b0, 0x0aa50, 0x1b255, 0x06d20, 0x0ada0, //2040-20490x14b63, 0x09370, 0x049f8, 0x04970, 0x064b0, 0x168a6, 0x0ea50, 0x06b20, 0x1a6c4, 0x0aae0, //2050-20590x0a2e0, 0x0d2e3, 0x0c960, 0x0d557, 0x0d4a0, 0x0da50, 0x05d55, 0x056a0, 0x0a6d0, 0x055d4, //2060-20690x052d0, 0x0a9b8, 0x0a950, 0x0b4a0, 0x0b6a6, 0x0ad50, 0x055a0, 0x0aba4, 0x0a5b0, 0x052b0, //2070-20790x0b273, 0x06930, 0x07337, 0x06aa0, 0x0ad50, 0x14b55, 0x04b60, 0x0a570, 0x054e4, 0x0d160, //2080-20890x0e968, 0x0d520, 0x0daa0, 0x16aa6, 0x056d0, 0x04ae0, 0x0a9d4, 0x0a2d0, 0x0d150, 0x0f252, //2090-20990x0d520 //2100],lunarMonth = ['正', '二', '三', '四', '五', '六', '七', '八', '九', '十', '冬', '腊'],lunarDay = ['一', '二', '三', '四', '五', '六', '七', '八', '九', '十', '初', '廿'],tianGan = ['甲', '乙', '丙', '丁', '戊', '己', '庚', '辛', '壬', '癸'],diZhi = ['子', '丑', '寅', '卯', '辰', '巳', '午', '未', '申', '酉', '戌', '亥'];// 公历转农历函数
function sloarToLunar(sy, sm, sd) {// 输入的月份减1处理sm -= 1;// 计算与公历基准的相差天数// Date.UTC()返回的是距离公历1970年1月1日的毫秒数,传入的月份需要减1let daySpan = (Date.UTC(sy, sm, sd) - Date.UTC(1949, 0, 29)) / (24 * 60 * 60 * 1000) + 1;let ly, lm, ld;// 确定输出的农历年份for (let j = 0; j < lunarYearArr.length; j++) {daySpan -= lunarYearDays(lunarYearArr[j]);if (daySpan <= 0) {ly = 1949 + j;// 获取农历年份确定后的剩余天数daySpan += lunarYearDays(lunarYearArr[j]);break}}// 确定输出的农历月份for (let k = 0; k < lunarYearMonths(lunarYearArr[ly - 1949]).length; k++) {daySpan -= lunarYearMonths(lunarYearArr[ly - 1949])[k];if (daySpan <= 0) {// 有闰月时,月份的数组长度会变成13,因此,当闰月月份小于等于k时,lm不需要加1if (hasLeapMonth(lunarYearArr[ly - 1949]) && hasLeapMonth(lunarYearArr[ly - 1949]) <= k) {if (hasLeapMonth(lunarYearArr[ly - 1949]) < k) {lm = k;} else if (hasLeapMonth(lunarYearArr[ly - 1949]) === k) {lm = '闰' + k;} else {lm = k + 1;}} else {lm = k + 1;}// 获取农历月份确定后的剩余天数daySpan += lunarYearMonths(lunarYearArr[ly - 1949])[k];break}}// 确定输出农历哪一天ld = daySpan;// 将计算出来的农历月份转换成汉字月份,闰月需要在前面加上闰字if (hasLeapMonth(lunarYearArr[ly - 1949]) && (typeof(lm) === 'string' && lm.indexOf('闰') > -1)) {lm = `闰${lunarMonth[/\d/.exec(lm) - 1]}`} else {lm = lunarMonth[lm - 1];}// 将计算出来的农历年份转换为天干地支年ly = getTianGan(ly) + getDiZhi(ly);// 将计算出来的农历天数转换成汉字if (ld < 11) {ld = `${lunarDay[10]}${lunarDay[ld-1]}`} else if (ld > 10 && ld < 20) {ld = `${lunarDay[9]}${lunarDay[ld-11]}`} else if (ld === 20) {ld = `${lunarDay[1]}${lunarDay[9]}`} else if (ld > 20 && ld < 30) {ld = `${lunarDay[11]}${lunarDay[ld-21]}`} else if (ld === 30) {ld = `${lunarDay[2]}${lunarDay[9]}`}console.log(ly, lm, ld);return {lunarYear: ly,lunarMonth: lm,lunarDay: ld,}
}// 计算农历年是否有闰月,参数为存储农历年的16进制
// 农历年份信息用16进制存储,其中16进制的最后1位可以用于判断是否有闰月
function hasLeapMonth(ly) {// 获取16进制的最后1位,需要用到&与运算符if (ly & 0xf) {return ly & 0xf} else {return false}
}// 如果有闰月,计算农历闰月天数,参数为存储农历年的16进制
// 农历年份信息用16进制存储,其中16进制的第1位(0x除外)可以用于表示闰月是大月还是小月
function leapMonthDays(ly) {if (hasLeapMonth(ly)) {// 获取16进制的第1位(0x除外)return (ly & 0xf0000) ? 30 : 29} else {return 0}
}// 计算农历一年的总天数,参数为存储农历年的16进制
// 农历年份信息用16进制存储,其中16进制的第2-4位(0x除外)可以用于表示正常月是大月还是小月
function lunarYearDays(ly) {let totalDays = 0;// 获取正常月的天数,并累加// 获取16进制的第2-4位,需要用到>>移位运算符for (let i = 0x8000; i > 0x8; i >>= 1) {let monthDays = (ly & i) ? 30 : 29;totalDays += monthDays;}// 如果有闰月,需要把闰月的天数加上if (hasLeapMonth(ly)) {totalDays += leapMonthDays(ly);}return totalDays
}// 获取农历每个月的天数
// 参数需传入16进制数值
function lunarYearMonths(ly) {let monthArr = [];// 获取正常月的天数,并添加到monthArr数组中// 获取16进制的第2-4位,需要用到>>移位运算符for (let i = 0x8000; i > 0x8; i >>= 1) {monthArr.push((ly & i) ? 30 : 29);}// 如果有闰月,需要把闰月的天数加上if (hasLeapMonth(ly)) {monthArr.splice(hasLeapMonth(ly), 0, leapMonthDays(ly));}return monthArr
}// 将农历年转换为天干,参数为农历年
function getTianGan(ly) {let tianGanKey = (ly - 3) % 10;if (tianGanKey === 0) tianGanKey = 10;return tianGan[tianGanKey - 1]
}// 将农历年转换为地支,参数为农历年
function getDiZhi(ly) {let diZhiKey = (ly - 3) % 12;if (diZhiKey === 0) diZhiKey = 12;return diZhi[diZhiKey - 1]
}export default {sloarToLunar,hasLeapMonth,leapMonthDays,lunarYearDays,lunarYearMonths,getTianGan,getDiZhi
};

uniapp 原生js实现公历转农历相关推荐

  1. 原生js实现公历转农历

    原生js实现公历转农历 写在前面:在实现公历转农历代码之前,最好能够了解它们之间转换的思路,可以先看看这篇文章,了解思路之后,接下来就是将思路翻译为代码: 思路: 1.建立农历年份查询表 2.计算输入 ...

  2. js获取当前农历年月 原生js实现公历转农历

    原生js实现公历转农历(转载) 网上原生JS实现公历转农历的代码参差不齐,个人经过项目实践后发现有个博主的写的很好使用起来也很方便,于是一起分享给大家. 原博主的代码是在vue框架下写的,具体如下: ...

  3. js处理时间戳为各种格式/js判断公历/农历/周历节日和节气

    js获取时间 var date = new Date(); date.getYear();//获取当前年份距离1900年的年份 date.getFullYear();//获取当前年份 //date.g ...

  4. JS中1900-2100区间内的公历、农历互转的工具类

    说明: (1)由于博主是在Extjs项目中使用该工具类,所以这里我们用Extjs,但是本质上就是js. (2)该工具类是实际项目中一直在用的,至于实际出处是哪不得而知,博主只是针对自己的整理然后觉得日 ...

  5. js 万年历农历转阳历 方法_JavaScript实现公历转农历功能示例

    本文实例讲述了JavaScript实现公历转农历功能.分享给大家供大家参考,具体如下: 完整代码(该源码使用在线工具http://tools.jb51.net/code/js进行了格式化处理,以便于读 ...

  6. 一款公历转农历节气以及天干地支的js代码

    最近用到公历转农历,节气,天干地支的JavaScript代码.公历转节气可以计算法,能精确到时辰.如果只要精确到日也可以用查表法.然后农历涉及到闰月的计算.年和日的天干地支计算比较简单,但月份要根据节 ...

  7. 关于“1900年至2100年公历、农历互转的js代码”的详细分析

    今天讲的是对1900年至2100年公历.农历互转的js代码进行详细分析! 首先来看一下js里面的方法都得到了哪些有用的数据--这里直接在html文档里面引入该js文件,然后调用对应的方法: <s ...

  8. uniApp实现公农日历相互转换、公历、农历、阳历、阴历、calendar

    文章目录 前言 版本一 版本二 效果图 第一步,git下载组件 版本一 版本二 第二步,下载依赖包 第三步,使用 版本一 版本二 总结 版本一 版本二 微信小程序查看效果 关于js-calendar- ...

  9. js 根据公历日期 算出农历_根据公历日期计算农历年生肖及公历转换农历的方法...

    本帖最后由 wshcw 于 2011-12-6 23:23 编辑 有部分E友都知道,农历格式"[$-130000]e-m-d"转换出来的结果有好大一部分有误,那有没有其它转换办法呢 ...

最新文章

  1. ThinkPad T420更换SSD实录
  2. OS - MMAP初探
  3. Java虚拟机详解----常用JVM配置参数
  4. MySQL的索引学习
  5. requirejs与anjularjs框架
  6. ThinkingInJava对this关键字的介绍
  7. (转) Android平台上关于IM的实践总结
  8. 我离baidu.com有几跳
  9. oracle有关游标的知识
  10. Hi,大家好,这里是iOS用的 Flash 播放器 FlashViewer
  11. python是高级语言还是低级语言_高级与低级编程语言的解释,哪一种更容易上手?...
  12. 一款在线Markdown编辑器,Markdown小白神器
  13. 分析Padavan的代码二
  14. 分享一套国产化技术开发JAVA语言,大佬手下留情
  15. linux下实现线程暂停
  16. 常见的压缩指令,认真看完
  17. go-elasticSearch实战篇,带你学会elasticSearch的增删改查
  18. 如何使用winrar制作一个安装包
  19. 出租车管理系统java_Java学员作品-出租车管理系统
  20. 计算机专业的自我介绍英语翻译,大学生英语自我介绍(包括专业的英语翻译)

热门文章

  1. 什么是数据湖?为什么需要数据湖?
  2. Buzzsumo大型教程(内容营销+外链outreach必备)营销神器
  3. 置换贴图,法线贴图,凹凸贴图的区别
  4. 美的空气净化器H32评测:美观、实用以及更多
  5. 播放器实战22 解决花屏与卡顿问题
  6. 如何压缩GIF/GIF压缩软件教程方法全面解析
  7. python实验过程中遇到的问题以及解决办法_20183413 2029-2020-2《Python程序设计》实验一报告...
  8. 快排 c语言,c语言的库函数之快排
  9. access与project与python的区别_Access与 Excel区别
  10. Js基础引导(二)——语法