介绍
公历和农历互转在中国文化中有广泛的应用,可以满足人们在日常生活中的很多需求:
- 节日查询:在中国,很多节日是按照农历日期计算的,如春节、中秋节等。通过将公历日期转换为农历日期,可以轻松地查询某个节日的日期。
- 日历显示:在日历应用程序中,用户可以选择查看公历或农历日期。通过将公历日期和农历日期相互转换,可以实现日历的双重显示。
- 生肖年份:在中国,人们通常根据自己的生肖年份来计算自己的年龄。通过将公历日期转换为农历日期,可以确定某个人的生肖年份。
- 传统节气:中国的传统节气是按照太阳的运行来计算的,而不是按照公历日期。通过将公历日期转换为农历日期,可以确定某个日期是否是传统节气。
- 婚礼、生日等重要纪念日:在中国,很多人会根据自己的生肖、农历日期等选择结婚或庆祝生日。通过将公历日期转换为农历日期,可以确定某个日期是否是重要的纪念日。
公历和农历之间的转换
要在 JavaScript 中进行公历和农历之间的转换,可以使用一些库或算法来完成。
js-calendar-converter
:这是一个 JavaScript 库,可用于将公历日期转换为农历日期,以及将农历日期转换为公历日期。它使用中国的农历算法,并提供了一些附加功能,如节气和节日查询。moment-lunar
:这是一个 Moment.js 插件,可以将公历和农历之间相互转换。它使用中国的农历算法,并提供了 Moment.js 的所有功能,如格式化、语言本地化等。lunar.js
:这是一个 JavaScript 库,可以将公历日期转换为农历日期。它使用中国的农历算法,并提供了一些附加功能,如节气和节日查询。
js-calendar-converter
- 以下是一个将公历日期转换为农历日期的示例代码:
// 导入库
const calendar = require('js-calendar-converter');
// 将公历日期转换为农历日期
const lunarDate = calendar.solar2lunar(2023, 4, 19);
// 输出农历日期
console.log(lunarDate);
以下是结果:
{
date: '2023-4-19',
lunarDate: '2023-2-29',
festival: null,
lunarFestival: null,
lYear: 2023,
lMonth: 2,
lDay: 29,
Animal: '兔',
IMonthCn: '闰二月',
IDayCn: '廿九',
cYear: 2023,
cMonth: 4,
cDay: 19,
gzYear: '癸卯',
gzMonth: '丙辰',
gzDay: '丁未',
isToday: true,
isLeap: true,
nWeek: 3,
ncWeek: '星期三',
isTerm: false,
Term: null,
astro: '白羊座'
}
这表示 2023 年 4 月 19 日是农历闰 2 月 29 日。
c开头的是公历各属性值 l开头的自然就是农历咯 gz开头的就是天干地支纪年的数据啦
- 以下是一个将农历日期转换为公历日期的示例代码:
// 导入库
const calendar = require('js-calendar-converter');
// 将农历日期转换为公历日期
const solarDate = calendar.lunar2solar(2023, 3, 24, false);
// 输出公历日期
console.log(solarDate);
以下是结果:
{
date: '2023-5-13',
lunarDate: '2023-3-24',
festival: null,
lunarFestival: null,
lYear: 2023,
lMonth: 3,
lDay: 24,
Animal: '兔',
IMonthCn: '三月',
IDayCn: '廿四',
cYear: 2023,
cMonth: 5,
cDay: 13,
gzYear: '癸卯',
gzMonth: '丁巳',
gzDay: '辛未',
isToday: false,
isLeap: false,
nWeek: 6,
ncWeek: '星期六',
isTerm: false,
Term: null,
astro: '金牛座'
}
这表示 2023 年农历 3 月 24 日的公历是 2023 年 5 月 13 日。
浏览器原生 JS API
目前只能将公历日期转为农历日期。
const toCnDate = date => date.toLocaleString('zh-u-ca-chinese', { dateStyle: 'full' }) + ' ' + date.toLocaleTimeString(0, { hour12: false });
toCnDate(new Date); // 2022壬寅年九月廿九星期一 21:45:11