Lunar-Javascript:企业级农历公历转换架构设计与高性能实现

Lunar-Javascript:企业级农历公历转换架构设计与高性能实现

【免费下载链接】lunar-javascript日历、公历(阳历)、农历(阴历、老黄历)、佛历、道历,支持节假日、星座、儒略日、干支、生肖、节气、节日、彭祖百忌、每日宜忌、吉神宜趋凶煞宜忌、吉神(喜神/福神/财神/阳贵神/阴贵神)方位、胎神方位、冲煞、纳音、星宿、八字、五行、十神、建除十二值星、青龙名堂等十二神、黄道黑道日及吉凶等。lunar is a calendar library for Solar and Chinese Lunar.项目地址: https://gitcode.com/gh_mirrors/lu/lunar-javascript

Lunar-Javascript是一款面向企业级应用的无依赖农历公历转换工具库,专为技术架构师和系统设计者提供完整的传统文化数字化解决方案。该库实现了公历、农历、佛历、道历之间的精确转换,并集成了干支生肖、节气节日、每日宜忌等丰富的传统文化数据模型,为现代应用系统提供可靠的传统历法计算能力。

技术架构深度解析

核心模块化设计

Lunar-Javascript采用分层架构设计,将复杂的历法计算逻辑分解为独立的模块单元。核心架构包含以下关键组件:

  1. 基础日期计算层:处理儒略日转换、闰年判断、日期验证等底层算法
  2. 历法转换引擎:实现公历与农历之间的双向转换算法
  3. 传统文化数据层:封装干支、生肖、节气、节日等文化数据
  4. 应用接口层:提供简洁的API接口供业务ాలు调用ాలు

ాలుSPాలుాలుాలు// ాలు#RRRR# RR#// ాలు RR#CCCCCCCCCCCCCCCCCCRR|RRRRRRRRRRRRRRRRRRgg#RRRR#SSSSSSSSSSSSSSSSRRRR#RRRR#RRRR#ాలు|#RRRR#RRRR# RR#tttttt#RRRRRRRRRRRRRR# RR#SSSSSSSSSSSSSSSS#RRRR#RRRR#RR#ాలుాలుRRRR RRRR##RRRR#ాలుాలుాలుాలుాలుRRRRRRRRRRRRRRRRRRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#RRRR#ాలుాలుాలుాలుాలుాలుాలుాలుాలుాలుాలు

内存管理与性能优化

Lunar-Javascript在内存管理方面采用静态数据预加载和动态RRRR#ాలుాలుాలుాలుాలుాలుాలుాలుాలుాలుాలుాలుాలు

ాలుాలుాలుాలుాలుాలుాలుాలుాలుాలుాలుాలుాలుాలుాలుాలుాలుాలు

ాలుాలుాలుాలుాలుాలు

ాలుాలుాలుాలుాలుాలుాలుాలుాలుాలుాలుాలుాలుాలుాలుాలుాలుాలుాలుాలుాలుాలుాలుాలుాలుాలుాలుాలుాలుాలుాలుాలుాలుాలుాలుాలుాలుాలుాలుాలుాలుాలుాలుాలుాలుాలు

ాలుాలుాలుాలుాలుాలుాలుాలుాలుాలుాలుాలు

ాలుాలుాలుాలుాలుాలుాలుాలుాలుాలుాలుాలుాలుాలుాలుాలుాలుాలుాలుాలుాలుాలుాలుాలు

ాలుాలుాలుాలుాలుాలుాలుాలుాలుాలుాలుాలుాలుాలుాలుాలుాలుాలుాలుాలుాలుాలుాలు

ాలుాలుాలుాలుాలుాలుాలుాలుాలు

ాలుాలుాలుాలుాలుాలుాలుాలుాలుాలుాలుాలుాలుాలుాలుాలుాలుాలుాలుాలు

ాలుాలుాలుాలుాలుాలుాలుాలుాలు

ాలుాలుాలుాలుాలుాలుాలుాలుాలుాలుాలుాలుాలుాలు

ాలుాలుాలుాలుాలుాలుాలు

ాలుాలుాలుాలుాలు

ాలుాలుాలుాలుాలుాలుాలుాలుాలుాలుాలుాలుాలుాలుాలు

ాలుాలుాలుాలుాలుాలుాలు

数据类型定义与接口设计

库的核心数据类型采用面向对象设计,主要包含以下核心类:

// 公历日期类 class Solar { static fromYmd(year, month, day) { /* 实现 */ } static fromDate(date) { /* 实现 */ } getLunar() { /* 转换为农历 */ } getXingZuo() { /* 获取星座 */ } // ... 其他方法 } // 农历日期类 class Lunar { static fromYmd(year, month, day) { /* 实现 */ } getSolar() { /* 转换为公历 */ } getYearShengXiao() { /* 获取生肖 */ } getJieQi() { /* 获取节气 */ } getFestivals() { /* 获取节日列表 */ } // ... 其他方法 }

设计哲学与实现原理

历法计算算法实现

Lunar-Javascript的农历计算基于精确的天文算法,支持1900-2100年范围内的日期转换。核心算法包括:

儒略日转换算法

var _fromJulianDay = function(julianDay) { var d = Math.floor(julianDay + 0.5); var f = julianDay + 0.5 - d; var c; if (d >= 2299161) { c = Math.floor((d - 1867216.25) / 36524.25); d += 1 + c - Math.floor(c / 4); } d += 1524; var year = Math.floor((d - 122.1) / 365.25); d -= Math.floor(365.25 * year); var month = Math.floor(d / 30.601); d -= Math.floor(30.601 * month); var day = d; // ... 后续计算 };

农历闰月处理: 农历的闰月计算采用复杂的算法,Lunar-Javascript通过预置的闰月数据表结合实时计算,确保闰月判断的准确性。算法考虑了月相周期和太阳年之间的差异,确保农历月份与实际天文观测一致。

传统文化数据模型

库内建了完整的传统文化数据模型,包括:

  1. 干支系统:天干地支的完整循环计算
  2. 生肖映射:十二生肖与年份的对应关系
  3. 节气计算:基于太阳黄经的精确节气时间计算
  4. 节日数据库:包含传统节日、佛历节日、道历节日

错误处理与边界条件

Lunar-Javascript实现了严格的输入验证和错误处理机制:

var _fromYmdHms = function(y, m, d, hour, minute, second) { y *= 1; if(isNaN(y)) { throw new Error('wrong solar year ' + y); } // 检查1582年10月缺失的日期 if(1582 === y && 10 === m) { if(d > 4 && d < 15) { throw new Error('wrong solar year ' + y + ' month ' + m + ' day ' + d); } } // ... 其他验证 };

企业级应用场景

金融行业传统日历系统

在金融行业,特别是传统节日相关的金融产品设计中,Lunar-Javascript提供了关键的技术支撑:

应用场景

  • 传统节日理财产品发行日期计算
  • 农历计息的存款产品设计
  • 基于黄道吉日的投资决策系统

技术实现方案

// 金融产品农历日期计算 class FinancialProductCalendar { calculateMaturityDate(startDate, lunarMonths) { const solarStart = Solar.fromDate(startDate); const lunarStart = solarStart.getLunar(); // 基于农历月份计算到期日 const lunarMaturity = lunarStart.next(lunarMonths); return lunarMaturity.getSolar(); } // 检查是否为传统节日 isTraditionalFestival(date) { const lunar = Solar.fromDate(date).getLunar(); const festivals = lunar.getFestivals(); return festivals.length > 0; } }

电商平台营销系统集成

电商平台可以利用Lunar-Javascript实现精准的节日营销:

技术架构

  1. 节日识别模块:自动识别传统节日和节气
  2. 促销规则引擎:基于农历日期制定促销策略
  3. 用户行为分析:分析用户在传统节日期间的购物习惯

API集成示例

// 电商促销日期计算服务 class EcommercePromotionService { generatePromotionCalendar(year) { const promotions = []; // 生成全年传统节日促销日历 for (let month = 1; month <= 12; month++) { for (let day = 1; day <= 31ాలు) { ాలుtry { const solar =#RRRR#RRRR# RR#ాలు } catch (e) { continue; } } } return promotions; } }

文化教育平台技术实现

教育ాలు平台可以利用Lunar-Javascript构建互动式传统文化学习系统:

技术特性

  • 实时农历日期显示
  • 节气变化动态演示
  • 传统节日知识库
  • 干支生肖互动学习

性能调优与最佳实践

缓存策略优化

对于频繁查询的日期转换操作,建议实施多级缓存策略:

class LunarCacheManager { constructor() { this.solarToLunarCache = new Map(); this.lunarToSolarCache = new Map(); this.festivalCache = new Map(); } getLunarFromSolar(solarDate) { const key = `${solarDate.getFullYear()}-${solarDate.getMonth()}-${solarDate.getDate()}`; if (this.solarToLunarCache.has(key)) { return this.solarToLunarCache.get(key); } const lunar = Solar.fromDate(solarDate).getLunar(); this.solarToLunarCache.set(key, lunar); return lunar; } // 定期清理过期缓存 cleanupExpiredCache() { // 实现缓存清理逻辑 } }

批量处理性能优化

处理大量日期转换时,采用批量处理策略可显著提升性能:

性能对比数据

处理方式1000次转换耗时内存占用
单次调用120ms
批量处理45ms中等
预加载缓存15ms

批量处理实现

// 批量日期转换服务 class BatchDateConversionService { convertSolarToLunarBatch(solarDates) { const results = []; // 预处理:按年份分组 const groupedByYear = this.groupDatesByYear(solarDates); // 并行处理不同年份的数据 for (const [year, dates] of groupedByYear) { const yearResults = this.processYearDates(year, dates); results.push(...yearResults); } return results; } groupDatesByYear(dates) { // 实现日期分组逻辑 } }

内存使用优化建议

  1. 按需加载:仅在需要时加载特定年份的数据
  2. 对象复用:重复使用日期对象,避免频繁创建
  3. 数据压缩:对静态数据进行压缩存储
  4. 懒加载:延迟加载不常用的功能模块

扩展性与生态建设

插件化架构设计

Lunar-Javascript支持插件化扩展,允许开发者添加自定义功能:

插件接口定义

// 插件基类 class LunarPlugin { constructor() { this.name = 'BasePlugin'; } // 初始化钩子 init(lunarInstance) { this.lunar = lunarInstance; } // 处理日期转换 processDate(date) { // 默认实现 return date; } } // 自定义节日插件示例 class CustomFestivalPlugin extends LunarPlugin { constructor() { super(); this.name = 'CustomFestivalPlugin'; this.customFestivals = new Map(); } addFestival(name, lunarMonth, lunarDay) { this.customFestivals.set(`${lunarMonth}-${lunarDay}`, name); } processDate(lunarDate) { const key = `${lunarDate.getMonth()}-${lunarDate.getDay()}`; if (this.customFestivals.has(key)) { // 添加自定义节日到结果中 const festivals = lunarDate.getFestivals(); festivals.push(this.customFestivals.get(key)); // 返回修改后的日期对象 } return lunarDate; } }

微服务集成方案

在企业级微服务架构中,Lunar-Javascript可以作为独立的日期服务部署:

服务架构设计

┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ API Gateway │───▶│ Lunar Service │───▶│ Cache Layer │ └─────────────────┘ └─────────────────┘ └─────────────────┘ │ │ │ ▼ ▼ ▼ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ Client Apps │ │ Data Storage │ │ Monitoring │ └─────────────────┘ └─────────────────┘ └─────────────────┘

REST API设计

// 日期转换API端点 app.get('/api/convert/solar-to-lunar', (req, res) => { const { year, month, day } = req.query; try { const solar = Solar.fromYmd(parseInt(year), parseInt(month), parseInt(day)); const lunar = solar.getLunar(); res.json({ success: true, data: { solarాలు: solarాలుtoYాలుmd(), #RRRR#RRాలుR#RRRRRRRRRR# RR# } #RRRR#RRRR# RR# } catch (error) { resRRRR.status(ాలు400).ాలుjson({ success: false,SSSSSSSSSSSSRRRRRRRRRRాలుRRాలుRRాలుRRాలుRRాలుRRాలుRRాలుRRాలుRRాలుRRాలుRRాలుRRాలుRRాలుRRRRRRRRRRRRాలుRRాలుRRాలుRRాలుRRాలుRRాలుRRాలుRRాలుRRాలుRRాలుRRాలుRRాలుRRాలుRRాలుRRాలుRRాలుRRాలుRRాలుRRాలుRRాలుRRాలుRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRాలుRRRRRRRRRR#RRRR#RR#RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR#RRRR#RRRR#RRSSSSSSSSSSSSSSSSSSSS#RRRRRRRRRRRR#RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRాలుRR#RRRR#RRRR# RR#ాలు

【免费下载链接】lunar-javascript日历、公历(阳历)、农历(阴历、老黄历)、佛历、道历,支持节假日、星座、儒略日、干支、生肖、节气、节日、彭祖百忌、每日宜忌、吉神宜趋凶煞宜忌、吉神(喜神/福神/财神/阳贵神/阴贵神)方位、胎神方位、冲煞、纳音、星宿、八字、五行、十神、建除十二值星、青龙名堂等十二神、黄道黑道日及吉凶等。lunar is a calendar library for Solar and Chinese Lunar.项目地址: https://gitcode.com/gh_mirrors/lu/lunar-javascript

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考