首页 > 综合百科 正文
编写一个实用的阳历转阴历函数
介绍
阳历转阴历是一个经常被用到的功能,原因在于阴历在中国传统文化中扮演着至关重要的角色,包括生日、结婚、节日等,阴历已经成为了中国民族文化的一部分。因此,编写一个实用的阳历转阴历函数对于开发者而言非常必要。
算法
阳历和阴历在运转方式上有着根本的区别,阳历是根据地球绕太阳运行而制定的,而阴历则根据月亮围绕地球运动而设定。因此,计算阳历转阴历需要一个算法。经过研究,我们可以采用蔡勒(Zeller)公式,这个公式在计算日期方面非常有效。
以下是蔡勒公式:
E = Y (mod 100)
JD = 36525Y/100 + 1722 + D + (int)(Y/4) + (int)(C/4) - 2C
C = Y/100
Zeller公式的计算方法:
h = (JD + 1.5) mod 7
实现
我们可以通过以下的JavaScript函数来实现阳历转阴历功能。
function solar2lunar(solarYear, solarMonth, solarDay) {
var lunarInfo = new Array(
0, 21208, 42467, 63836, 85337, 107014, 128383, 150445, 173255, 195914,
219425, 243793, 269024, 295125, 322100, 349952, 378680, 408288, 438781, 470162,
502435, 535599, 569658, 604610, 640464, 677215, 714860, 753399, 792830, 833153,
874367, 916471, 959463, 1003442, 1048575, 1093727, 1138898, 1184086, 1229292, 1274514,
1319752, 1365004, 1410270, 1455550, 1500842, 1546148, 1591466, 1636796, 1682138, 1727492,
1772857, 1818234, 1863621, 1909020, 1954430, 1999850, 2045280, 2090720, 2136170, 2181630,
2227100, 2272580, 2318070, 2363570, 2409080, 2454600, 2500130, 2545670, 2591220, 2636780,
2682350, 2727930, 2773520, 2819120, 2864730, 2910350, 2955980, 3001620, 3047270, 3092930,
3138600, 3184280, 3229970, 3275670, 3321380, 3367100, 3412830, 3458570, 3504320, 3550080,
3595850, 3641630, 3687420, 3733220, 3779030, 3824850, 3870680, 3916520, 3962370, 4008230
);
var solarMonthDays = new Array(
31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
);
function getBit(m, n) {
return (m >> n) & 1
}
function e2c() {
var total, m, n, k;
var isEnd = false;
var tmp = solarYear;
if (tmp < 1900) {
tmp += 1900
}
total = (tmp - 1921) * 365 + Math.floor((tmp - 1921) / 4) + lunarInfo[solarMonth - 1] + solarDay - 38;
if (solarYear % 4 === 0 && solarMonth > 2) {
total++;
}
for (m = 0;; m++) {
k = (lunarInfo[m] <= 0xfff) ? 11 : 12;
for (n = k; n >= 0; n--) {
if (total <= 29 + getBit(lunarInfo[m], n)) {
isEnd = true;
break;
}
total = total - 29 - getBit(lunarInfo[m], n);
}
if (isEnd) break;
}
lunarYear = 1921 + m;
lunarMonth = k - n + 1;
lunarDay = total;
if (k === 12) {
if (lunarMonth === Math.floor(lunarInfo[m] / 0x10000) + 1) {
lunarMonth = 1 - lunarMonth;
}
if (lunarMonth > Math.floor(lunarInfo[m] / 0x10000) + 1) {
lunarMonth--;
}
}
return {
lunarYear: lunarYear,
lunarMonth: lunarMonth,
lunarDay: lunarDay
};
}
return e2c();
}
此函数的主要工作是计算阳历日期对应的阴历日期。在函数内部,我们定义了一些常量以及一些辅助方法。计算完成后,函数会以JSON格式返回年月日信息。
总结
阳历转阴历函数的编写需要一定的数学基础,特别是对于蔡勒公式的理解和运用。此外,我们还需要对于JavaScript的语法和注释有一定的了解。但是,一旦我们掌握了这些,就可以轻松编写出一个实用的阳历转阴历函数了。这个函数可以被广泛应用于生肖查询、节日查询等方面。
猜你喜欢
- 2024-02-29 teardrops(脆弱的泪水:探索teardrops背后的故事)
- 2024-02-29 中国护理学杂志核心期刊(护理实践中的沟通技巧探究)
- 2024-02-29 阳历转阴历函数(编写一个实用的阳历转阴历函数)
- 2024-02-28 化学召唤师在哪看(成为一名化学召唤师:寻找你的知识源泉)
- 2024-02-28 嘉玛·沃德 了不起的盖茨比(嘉玛·沃德:一个梦想家的故事)
- 2024-02-28 dwgtrueview(了解DWG TrueView软件:CAD文件查看器的绝佳选择)
- 2024-02-28 免费图书馆电子资源(免费图书馆电子资源 提高个人知识管理效率的不二选择)
- 2024-02-28 employee(Understanding Effective Employee Management)
- 2024-02-28 esttime(优化时间管理的方法与技巧)
- 2024-02-28 geforcegtx650(GeForce GTX 650 A Game-Changing Graphics Card for Gaming Enthusiasts)
- 2024-02-28 msft50(微软50:探索未来云计算引领者的新世界)
- 2024-02-28 nemesis(惩罚天使:追寻nemesis的复仇之路)
- 2024-02-29teardrops(脆弱的泪水:探索teardrops背后的故事)
- 2024-02-29中国护理学杂志核心期刊(护理实践中的沟通技巧探究)
- 2024-02-29阳历转阴历函数(编写一个实用的阳历转阴历函数)
- 2024-02-28化学召唤师在哪看(成为一名化学召唤师:寻找你的知识源泉)
- 2024-02-28嘉玛·沃德 了不起的盖茨比(嘉玛·沃德:一个梦想家的故事)
- 2024-02-28dwgtrueview(了解DWG TrueView软件:CAD文件查看器的绝佳选择)
- 2024-02-28免费图书馆电子资源(免费图书馆电子资源 提高个人知识管理效率的不二选择)
- 2024-02-28employee(Understanding Effective Employee Management)
- 2023-02-24大盘鸡的家常做法(家常版大盘鸡,方法简单,好吃接地气,吃完汤汁拌面,真过瘾)
- 2023-02-24大连在哪个省(东北三省最发达的城市——大连)
- 2023-02-24大麦茶怎么泡(大麦茶怎么泡?)
- 2023-02-24河蚌怎么处理(为什么在农村很少人吃河蚌?)
- 2023-02-24牛肉丸子的做法(自制纯手工牛肉丸,劲道弹性足,鲜香有嚼劲)
- 2023-02-24浏览器兼容性(浏览器兼容模式怎么设置?)
- 2023-02-24zuoche(领导开车的礼仪)
- 2023-02-24获取ip地址(如何查看电脑ip地址?)
- 2024-02-28employee(Understanding Effective Employee Management)
- 2024-02-28msft50(微软50:探索未来云计算引领者的新世界)
- 2024-02-28nemesis(惩罚天使:追寻nemesis的复仇之路)
- 2024-02-27ppt素材模板全套免费(免费PPT素材模板,让你的演示更出彩)
- 2024-02-27ppzhushou(手机应用商店的选择技巧)
- 2024-02-2710万左右性价比高的车(选车不易,来一篇性价比高的车型推荐)
- 2024-02-26影视编导培训机构(从入门到高级——影视编导培训机构)
- 2024-02-26vesakday(Understanding the Significance of Vesak Day)
- 猜你喜欢
-
- teardrops(脆弱的泪水:探索teardrops背后的故事)
- 中国护理学杂志核心期刊(护理实践中的沟通技巧探究)
- 阳历转阴历函数(编写一个实用的阳历转阴历函数)
- 化学召唤师在哪看(成为一名化学召唤师:寻找你的知识源泉)
- 嘉玛·沃德 了不起的盖茨比(嘉玛·沃德:一个梦想家的故事)
- dwgtrueview(了解DWG TrueView软件:CAD文件查看器的绝佳选择)
- 免费图书馆电子资源(免费图书馆电子资源 提高个人知识管理效率的不二选择)
- employee(Understanding Effective Employee Management)
- esttime(优化时间管理的方法与技巧)
- geforcegtx650(GeForce GTX 650 A Game-Changing Graphics Card for Gaming Enthusiasts)
- msft50(微软50:探索未来云计算引领者的新世界)
- nemesis(惩罚天使:追寻nemesis的复仇之路)
- 大武当分集剧情介绍1-40(大武当分集剧情总结)
- 学校实行日报告零报告制度(学校零报告制度的实行)
- humphreys(探索幸福感的科学)
- 如何申请网站备案(如何顺利申请网站备案)
- become的意思(进化:成为更好的自己)
- stranded(Surviving Alone The Challenges of Being Stranded)
- cosmax香港(Cosmax香港:美妆行业的领跑者)
- miracles(Unbelievable Wonders The Power of Miracles)
- tcpip协议(TCPIP协议与网络通信)
- 拆弹部队迅雷下载(拆弹部队迅雷下载:快速获取高清电影资源的最佳途径)
- ppt素材模板全套免费(免费PPT素材模板,让你的演示更出彩)
- deadcandance(Deadcandance An Enigmatic Fusion of Styles and Sounds)
- webmail(Webmail Making Email Accessible Anywhere)
- 量化多空指标公式源码(量化交易 多空指标公式源码解析)
- 爱护公物主题班会(共建美好校园,爱护公物从我做起)
- 国服夏洛特连招技巧(国服夏洛特:王牌战斗家的连招技巧)
- 凌动cpu排行榜(凌动CPU排行榜:浅析市场占有率、性能和成本的关系)
- 蘑菇炒鱿鱼番外广播剧(混战中的奇遇)