1
0
mirror of synced 2026-04-15 21:08:40 +08:00

Compare commits

...

43 Commits

Author SHA1 Message Date
6tail
2c7fa900a6 v1.6.4 中元节改为农历七月十五;修复Solar的nextMonth超期问题。 2023-09-01 20:53:28 +08:00
6tail
0863bb6371 v1.6.3 Solar增加薪资比例;修正与寿星v5.10的节气误差;修复古时阴阳历转换错误的问题。 2023-08-20 14:47:11 +08:00
6tail
5b0ed30657 v1.6.2 优化多语言支持。 2023-05-03 21:10:05 +08:00
6tail
e9e23ee38f v1.6.1 优化多语言支持。 2023-04-26 21:38:51 +08:00
6tail
0dddcf841f v1.6.0 多语言支持。 2023-04-16 18:30:42 +08:00
6tail
7a71e07ade v1.3.4 LunarMonth增加序号、干支、财神方位等;完善纪念日。 2023-03-26 21:56:49 +08:00
6tail
853cb2f3a9 v1.3.3 优化八字转阳历;修复少量农历年的月份错误;新增农历年天数和当年月份列表。 2023-03-11 19:15:02 +08:00
6tail
13c251080b v1.3.2 修复阳历推移错误的问题。 2023-02-20 20:57:45 +08:00
6tail
1f708a8d6f v1.3.1 修复八字转阳历极端情况下仍然有遗漏的问题。 2023-02-06 21:06:36 +08:00
6tail
b926be0022 v1.3.1 修复八字转阳历极端情况下仍然有遗漏的问题。 2023-02-06 21:05:44 +08:00
6tail
f4e6fa3c9a v1.3.0 彻底抛弃js原生Date。 2023-02-03 12:50:17 +08:00
6tail
1fd780f3c4 v1.2.38 修复胎息错误;修复1582年10月少10天引起的各种兼容问题;修复八字转阳历遗漏问题。 2023-01-30 11:35:51 +08:00
6tail
ac57a9bae0 v1.2.37 更新2023年法定假日数据。 2022-12-09 17:36:00 +08:00
6tail
3f2f9d702c v1.2.36 修复立春比春节早时年九星的错误;修复跨年时阳历月中获取周的错误。 2022-11-25 20:43:02 +08:00
6tail
c0bd1d5565 Merge pull request #13 from helloxum/master
修复月中周对象在跨年时计算错误的问题
2022-11-15 18:47:00 +08:00
helloxum
263f280395 修复月中周对象在跨年时计算错误的问题 2022-11-14 21:21:56 +08:00
6tail
5d18af8619 v1.2.35 修复物候的错误。 2022-10-19 18:28:49 +08:00
6tail
a41d2c6c2a v1.2.34 修复春节和立春之间月干错误的问题。 2022-10-12 21:38:38 +08:00
6tail
234da67b0d v1.2.33 修复SolarWeek获取跨月天为NaN的问题。 2022-08-04 21:47:09 +08:00
6tail
c024e203a8 v1.2.32 节假日数据支持删除。 2022-05-20 20:06:35 +08:00
6tail
cde04a1993 v1.2.31 新增525心理健康节;修复出现多个全国中小学生安全教育日的问题;新增胎息。 2022-05-19 20:41:49 +08:00
6tail
69f0101c15 v1.2.30 新增万圣节、万圣节前夜;新增全国中小学生安全教育日;新增春社(原二月初二春社改为社日节)、秋社。 2022-04-03 10:38:19 +08:00
6tail
66d16db39e v1.2.29 每日宜忌支持2种流派。 2022-03-26 10:19:27 +08:00
6tail
98fb502c02 v1.2.28 支持获取当年第几周;支持2种流派获取起运。 2022-03-12 19:46:37 +08:00
6tail
44a2b408cf v1.2.27 新增阴历年、阴历月的推移;修复三候错误;修复道历节日错别字。 2022-02-16 20:02:38 +08:00
6tail
26557902f6 v1.2.26 修复SolarWeek获取当月第几周的错误。 2022-01-10 20:40:20 +08:00
6tail
1e7f33e048 v1.2.25 修复获取当前节气对象的阳历无时分秒的问题。 2022-01-08 16:42:06 +08:00
6tail
988d3f60a7 v1.2.24 修复获取当前节气对象报错的问题。 2022-01-08 10:19:13 +08:00
6tail
9bfb4ea312 v1.2.23 优化算法。 2022-01-07 20:31:14 +08:00
6tail
004899148d v1.2.22 修复九星错误;修复太岁方位错误。 2022-01-06 19:58:02 +08:00
6tail
c142ad7f6c v1.2.21 修复八字转阳历的错误;优化代码。 2022-01-02 17:31:31 +08:00
6tail
8d131aa31a Merge pull request #4 from Weidge/master
bug修复:反推八字Solar_fromBaZi函数,在阳历元旦后、农历新年前,反推失败的bug
2022-01-01 22:53:01 +08:00
Weidge
34469699a5 bug修复:反推八字Solar_fromBaZi函数,在阳历元旦后、农历新年前,反推失败的bug 2022-01-01 15:17:30 +08:00
6tail
ca64cf0a73 v1.2.20 修复九星错误;新增太岁方位;新增道历天赦日;优化代码。 2021-12-31 23:44:31 +08:00
6tail
1f2c867028 v1.2.19 修复获取起运阳历日期后导致星期错误的问题;补充灶马头相关内容。 2021-12-23 19:29:26 +08:00
6tail
56addd223b v1.2.18 南京大XX纪念日更改为国家公祭日;新增初候、二候、三候;新增三元九运;新增道历戊日;修复一些小bug。 2021-12-22 19:42:20 +08:00
6tail
90f59ec8f9 v1.2.17 佛历新增27宿;修复宜忌重复的问题;修复获取气时缺冬至的问题。 2021-12-08 21:18:53 +08:00
6tail
c902374dd7 v1.2.16 新增道历。 2021-11-23 21:32:25 +08:00
6tail
2106d0ee62 v1.2.15 修复星宿方位错误。 2021-11-20 20:22:49 +08:00
6tail
6af2de6a6e v1.2.14 修正胎神数据;增加福神流派。 2021-11-14 10:16:24 +08:00
6tail
7475d1d315 v1.2.13 新增2022年法定假日。 2021-11-02 22:10:50 +08:00
6tail
61512a3433 v1.2.12 恢复Lunar中的getOtherFestivals方法并更改为传统节日。 2021-10-27 21:04:37 +08:00
6tail
48b5e73de9 v1.2.11 恢复Solar中误删的getOtherFestivals方法。 2021-10-23 17:53:19 +08:00
22 changed files with 6471 additions and 772 deletions

1
.gitignore vendored
View File

@@ -2,3 +2,4 @@
*.iml
node_modules/
package-lock.json
.DS_Store

View File

@@ -1,6 +1,6 @@
# lunar [![License](https://img.shields.io/badge/license-MIT-4EB1BA.svg?style=flat-square)](https://github.com/6tail/lunar-javascript/blob/master/LICENSE)
lunar是一款无第三方依赖的公历(阳历)农历(阴历、老黄历)工具,支持星座、儒略日、干支、生肖、节气、节日、彭祖百忌、每日宜忌、吉神宜趋、凶煞宜忌、吉神(喜神/福神/财神/阳贵神/阴贵神)方位、胎神方位、冲煞、纳音、星宿、八字、五行、十神、建除十二值星、青龙名堂等十二神、黄道日及吉凶等。
lunar是一款无第三方依赖的公历(阳历)农历(阴历、老黄历)、佛历和道历工具,支持星座、儒略日、干支、生肖、节气、节日、彭祖百忌、每日宜忌、吉神宜趋、凶煞宜忌、吉神(喜神/福神/财神/阳贵神/阴贵神)方位、胎神方位、冲煞、纳音、星宿、八字、五行、十神、建除十二值星、青龙名堂等十二神、黄道日及吉凶等。
[English](https://github.com/6tail/lunar-javascript/blob/master/README_EN.md)
@@ -59,4 +59,4 @@ lunar是一款无第三方依赖的公历(阳历)和农历(阴历、老黄历)
## 文档
请移步至 [http://6tail.cn/calendar/api.html](http://6tail.cn/calendar/api.html "http://6tail.cn/calendar/api.html")
请移步至 [https://6tail.cn/calendar/api.html](https://6tail.cn/calendar/api.html "https://6tail.cn/calendar/api.html")

View File

@@ -59,4 +59,4 @@ Output:
## Documentation
Please visit [http://6tail.cn/calendar/api.html](http://6tail.cn/calendar/api.html "http://6tail.cn/calendar/api.html")
Please visit [https://6tail.cn/calendar/api.html](https://6tail.cn/calendar/api.html "https://6tail.cn/calendar/api.html")

View File

@@ -147,3 +147,45 @@ test('身宫', () => {
const eightChar = lunar.getEightChar();
expect(eightChar.getShenGong()).toBe('壬午');
});
test('身宫1', () => {
const solar = Solar.fromYmdHms(1994, 12, 6, 2, 0, 0);
const lunar = solar.getLunar();
const eightChar = lunar.getEightChar();
expect(eightChar.getShenGong()).toBe('丁丑');
});
test('身宫2', () => {
const solar = Solar.fromYmdHms(1990, 12, 11, 6, 0, 0);
const lunar = solar.getLunar();
const eightChar = lunar.getEightChar();
expect(eightChar.getShenGong()).toBe('庚辰');
});
test('身宫3', () => {
const solar = Solar.fromYmdHms(1993, 5, 23, 4, 0, 0);
const lunar = solar.getLunar();
const eightChar = lunar.getEightChar();
expect(eightChar.getShenGong()).toBe('庚申');
});
test('test11', () => {
const lunar = Lunar.fromYmdHms(1987, 12, 28, 23, 30, 0);
const eightChar = lunar.getEightChar();
expect(eightChar.getYear()).toBe('戊辰');
expect(eightChar.getMonth()).toBe('甲寅');
expect(eightChar.getDay()).toBe('庚子');
expect(eightChar.getTime()).toBe('戊子');
});
test('test12', () => {
expect(Solar.fromYmdHms('1999', '06', '07', '09', '11', '00').getLunar().getEightChar().toString()).toBe('己卯 庚午 庚寅 辛巳');
});
test('流月', () => {
const solar = Solar.fromYmdHms(2023, 5, 3, 9, 0, 0);
const lunar = solar.getLunar();
const eightChar = lunar.getEightChar();
const yun = eightChar.getYun(1);
expect(yun.getDaYun()[0].getLiuNian()[0].getLiuYue()[0].getGanZhi()).toBe('甲寅');
});

20
__tests__/Foto.test.js Normal file
View File

@@ -0,0 +1,20 @@
var {Foto, Lunar} = require('../lunar');
test('test1()', () => {
const foto = Foto.fromLunar(Lunar.fromYmd(2021, 10, 14));
expect(foto.toFullString()).toBe('二五六五年十月十四 (三元降) (四天王巡行)');
});
test('test2()', () => {
const foto = Foto.fromLunar(Lunar.fromYmd(2020, 4, 13));
expect(foto.getXiu()).toBe('氐');
expect(foto.getZheng()).toBe('土');
expect(foto.getAnimal()).toBe('貉');
expect(foto.getGong()).toBe('东');
expect(foto.getShou()).toBe('青龙');
});
test('test3()', () => {
const foto = Foto.fromLunar(Lunar.fromYmd(2021, 3, 16));
expect(foto.getOtherFestivals()).toStrictEqual(['准提菩萨圣诞']);
});

View File

@@ -1,4 +1,4 @@
var {HolidayUtil} = require('../lunar');
const {HolidayUtil} = require('../lunar');
test('test1', () => {
expect(HolidayUtil.getHoliday('2020-01-01') + '').toBe('2020-01-01 元旦节 2020-01-01');
@@ -42,3 +42,12 @@ test('test1', () => {
test('test2', () => {
expect(HolidayUtil.getHoliday('2016-10-04').getTarget()).toBe('2016-10-01');
});
test('testRemove', () => {
let holiday = HolidayUtil.getHoliday('2010-01-01');
expect(holiday.getName()).toBe('元旦');
HolidayUtil.fix('20100101~000000000000000000000000000');
holiday = HolidayUtil.getHoliday('2010-01-01');
expect(holiday).toBe(null);
});

12
__tests__/I18n.test.js Normal file
View File

@@ -0,0 +1,12 @@
const {Lunar, I18n} = require('../lunar');
test('test1', () => {
const lunar = Lunar.fromYmd(2023,1,1);
console.log(lunar.toFullString());
I18n.setLanguage('en');
console.log(lunar.toFullString());
I18n.setLanguage('chs');
});

View File

@@ -88,10 +88,23 @@ test('test6', () => {
test('test7', () => {
const lunar = Lunar.fromYmd(2012, 9, 1);
expect(lunar.getJieQiTable()['白露'].toYmdHms()).toBe('2012-09-07 13:29:00');
expect(lunar.getJieQiTable()['白露'].toYmdHms()).toBe('2012-09-07 13:29:01');
});
test('test8', () => {
const lunar = Lunar.fromYmd(2050, 12, 1);
expect(lunar.getJieQiTable()['大雪'].toYmdHms()).toBe('2050-12-07 06:41:00');
expect(lunar.getJieQiTable()['DA_XUE'].toYmdHms()).toBe('2050-12-07 06:41:13');
});
test('test9', () => {
const solar = Solar.fromYmd(2021, 12, 21);
const lunar = solar.getLunar();
expect(lunar.getJieQi()).toBe('冬至');
expect(lunar.getJie()).toBe('');
expect(lunar.getQi()).toBe('冬至');
});
test('test10', () => {
const lunar = Lunar.fromYmd(2023, 6, 1);
expect(lunar.getJieQiTable()['冬至'].toYmdHms()).toBe('2022-12-22 05:48:11');
});

View File

@@ -413,16 +413,6 @@ test('test022', () => {
expect(lunar.getSolar().toString()).toBe('2033-12-22');
});
test('test023', () => {
const lunar = Lunar.fromYmd(2022, 1, 1);
expect(lunar.getYearNineStar().toString()).toBe('五黄土玉衡');
});
test('test024', () => {
const lunar = Lunar.fromYmd(2033, 1, 1);
expect(lunar.getYearNineStar().toString()).toBe('三碧木天玑');
});
test('test025', () => {
const solar = Solar.fromYmdHms(2021, 6, 7, 21, 18, 0);
expect(solar.getLunar().toString()).toBe('二〇二一年四月廿七');
@@ -545,3 +535,123 @@ test('test047', () => {
const lunar = Solar.fromYmd(2017, 2, 15).getLunar();
expect(lunar.getDayLu()).toBe('子命互禄 辛命进禄');
});
test('test048', () => {
const lunar = Solar.fromYmd(2021, 11, 13).getLunar();
expect(lunar.getDayPositionTai()).toBe('碓磨厕 外东南');
});
test('test049', () => {
const lunar = Solar.fromYmd(2021, 11, 12).getLunar();
expect(lunar.getDayPositionTai()).toBe('占门碓 外东南');
});
test('test050', () => {
const lunar = Solar.fromYmd(2021, 11, 13).getLunar();
expect(lunar.getDayPositionFuDesc()).toBe('西南');
});
test('test051', () => {
const lunar = Solar.fromYmd(2021, 11, 12).getLunar();
expect(lunar.getDayPositionFuDesc()).toBe('正北');
});
test('test052', () => {
const lunar = Solar.fromYmd(2011, 11, 12).getLunar();
expect(lunar.getDayPositionTai()).toBe('厕灶厨 外西南');
});
test('test053', () => {
const lunar = Solar.fromYmd(1722, 9, 25).getLunar();
expect(lunar.getOtherFestivals() + '').toBe('秋社');
});
test('test054', () => {
const lunar = Solar.fromYmd(840, 9, 14).getLunar();
expect(lunar.getOtherFestivals() + '').toBe('秋社');
});
test('test055', () => {
const lunar = Solar.fromYmd(2022, 3, 16).getLunar();
expect(lunar.getOtherFestivals() + '').toBe('春社');
});
test('test056', () => {
const lunar = Solar.fromYmd(2021, 3, 21).getLunar();
expect(lunar.getOtherFestivals() + '').toBe('春社');
});
test('test057', () => {
const lunar = Lunar.fromYmd(1582, 9, 18);
expect(lunar.getSolar().toString()).toBe('1582-10-04');
});
test('test058', () => {
const lunar = Lunar.fromYmd(1582, 9, 19);
expect(lunar.getSolar().toString()).toBe('1582-10-15');
});
test('test059', () => {
const lunar = Lunar.fromYmd(1518, 1, 1);
expect(lunar.getSolar().toString()).toBe('1518-02-10');
});
test('test060', () => {
const lunar = Lunar.fromYmd(793, 1, 1);
expect(lunar.getSolar().toString()).toBe('0793-02-15');
});
test('test061', () => {
const lunar = Lunar.fromYmd(2025, -6, 1);
expect(lunar.getSolar().toString()).toBe('2025-07-25');
});
test('test062', () => {
const lunar = Lunar.fromYmd(2025, 6, 1);
expect(lunar.getSolar().toString()).toBe('2025-06-25');
});
test('test063', () => {
const lunar = Lunar.fromYmd(193, 1, 1);
expect(lunar.getSolar().toString()).toBe('0193-02-19');
});
test('test064', () => {
const lunar = Lunar.fromYmd(288, 1, 1);
expect(lunar.getSolar().toString()).toBe('0288-02-19');
});
test('test065', () => {
const lunar = Lunar.fromYmd(755, 1, 1);
expect(lunar.getSolar().toString()).toBe('0755-02-16');
});
test('test066', () => {
const lunar = Lunar.fromYmd(41, 1, 1);
expect(lunar.getSolar().toString()).toBe('0041-02-20');
});
test('test067', () => {
const lunar = Lunar.fromYmd(57, 1, 1);
expect(lunar.getSolar().toString()).toBe('0057-02-23');
});
test('test068', () => {
const lunar = Lunar.fromYmd(345, 1, 1);
expect(lunar.getSolar().toString()).toBe('0345-02-18');
});
test('test069', () => {
const solar = Solar.fromYmd(917, 12, 1);
expect(solar.getLunar().toString()).toBe('九一七年闰十月十四');
});
test('test070', () => {
const solar = Solar.fromYmd(917, 12, 31);
expect(solar.getLunar().toString()).toBe('九一七年冬月十五');
});
test('test071', () => {
const solar = Solar.fromYmd(918, 1, 1);
expect(solar.getLunar().toString()).toBe('九一七年冬月十六');
});

View File

@@ -0,0 +1,37 @@
var {LunarMonth} = require('../lunar');
test('test1', () => {
const month = LunarMonth.fromYm(2023, 1);
expect(month.getIndex()).toBe(1);
expect(month.getGanZhi()).toBe('甲寅');
});
test('test2', () => {
const month = LunarMonth.fromYm(2023, -2);
expect(month.getIndex()).toBe(3);
expect(month.getGanZhi()).toBe('丙辰');
});
test('test3', () => {
const month = LunarMonth.fromYm(2023, 3);
expect(month.getIndex()).toBe(4);
expect(month.getGanZhi()).toBe('丁巳');
});
test('test4', () => {
const month = LunarMonth.fromYm(2024, 1);
expect(month.getIndex()).toBe(1);
expect(month.getGanZhi()).toBe('丙寅');
});
test('test5', () => {
const month = LunarMonth.fromYm(2023, 12);
expect(month.getIndex()).toBe(13);
expect(month.getGanZhi()).toBe('丙寅');
});
test('test6', () => {
const month = LunarMonth.fromYm(2022, 1);
expect(month.getIndex()).toBe(1);
expect(month.getGanZhi()).toBe('壬寅');
});

View File

@@ -22,3 +22,83 @@ test('test4', () => {
const year = LunarYear.fromYear(2021);
expect(year.getGengTian()).toBe('十一牛耕田');
});
test('test5', () => {
const year = LunarYear.fromYear(1864);
expect(year.getYuan()).toBe('上元');
});
test('test6', () => {
const year = LunarYear.fromYear(1923);
expect(year.getYuan()).toBe('上元');
});
test('test7', () => {
const year = LunarYear.fromYear(1924);
expect(year.getYuan()).toBe('中元');
});
test('test8', () => {
const year = LunarYear.fromYear(1983);
expect(year.getYuan()).toBe('中元');
});
test('test9', () => {
const year = LunarYear.fromYear(1984);
expect(year.getYuan()).toBe('下元');
});
test('test10', () => {
const year = LunarYear.fromYear(2043);
expect(year.getYuan()).toBe('下元');
});
test('test11', () => {
const year = LunarYear.fromYear(1864);
expect(year.getYun()).toBe('一运');
});
test('test12', () => {
const year = LunarYear.fromYear(1883);
expect(year.getYun()).toBe('一运');
});
test('test13', () => {
const year = LunarYear.fromYear(1884);
expect(year.getYun()).toBe('二运');
});
test('test14', () => {
const year = LunarYear.fromYear(1903);
expect(year.getYun()).toBe('二运');
});
test('test15', () => {
const year = LunarYear.fromYear(1904);
expect(year.getYun()).toBe('三运');
});
test('test16', () => {
const year = LunarYear.fromYear(1923);
expect(year.getYun()).toBe('三运');
});
test('test17', () => {
const year = LunarYear.fromYear(2004);
expect(year.getYun()).toBe('八运');
});
test('test19', () => {
const year = LunarYear.fromYear(2021);
expect(year.getDayCount()).toBe(354);
});
test('test20', () => {
const year = LunarYear.fromYear(2023);
expect(year.getDayCount()).toBe(384);
});
test('test21', () => {
const year = LunarYear.fromYear(1517);
expect(year.getDayCount()).toBe(384);
});

View File

@@ -0,0 +1,16 @@
const {Solar, Lunar} = require('../lunar');
test('test1', () => {
const lunar = Solar.fromYmd(1985, 2, 19).getLunar();
expect(lunar.getYearNineStar().getNumber()).toBe('六');
});
test('test023', () => {
const lunar = Lunar.fromYmd(2022, 1, 1);
expect(lunar.getYearNineStar().toString()).toBe('六白金开阳');
});
test('test024', () => {
const lunar = Lunar.fromYmd(2033, 1, 1);
expect(lunar.getYearNineStar().toString()).toBe('四绿木天权');
});

View File

@@ -5,7 +5,7 @@ test('test', () => {
expect(solar.toString()).toBe('2019-05-01');
expect(solar.toFullString()).toBe('2019-05-01 00:00:00 星期三 (劳动节) 金牛座');
expect(solar.getLunar().toString()).toBe('二〇一九年三月廿七');
expect(solar.getLunar().toFullString()).toBe('二〇一九年三月廿七 己亥(猪)年 戊辰(龙)月 戊戌(狗)日 子(鼠)时 纳音[平地木 大林木 平地木 桑柘木] 星期三 西方白虎 星宿[参水猿](吉) 彭祖百忌[戊不受田田主不祥 戌不吃犬作怪上床] 喜神方位[巽](东南) 阳贵神方位[艮](东北) 阴贵神方位[坤](西南) 福神方位[](北) 财神方位[坎](正北) 冲[(壬辰)龙] 煞[北]');
expect(solar.getLunar().toFullString()).toBe('二〇一九年三月廿七 己亥(猪)年 戊辰(龙)月 戊戌(狗)日 子(鼠)时 纳音[平地木 大林木 平地木 桑柘木] 星期三 西方白虎 星宿[参水猿](吉) 彭祖百忌[戊不受田田主不祥 戌不吃犬作怪上床] 喜神方位[巽](东南) 阳贵神方位[艮](东北) 阴贵神方位[坤](西南) 福神方位[](北) 财神方位[坎](正北) 冲[(壬辰)龙] 煞[北]');
});
test('1', () => {
@@ -29,5 +29,123 @@ test('9', () => {
});
test('10', () => {
expect(SolarUtil.isLeapYear(1500)).toBe(false);
expect(SolarUtil.isLeapYear(1500)).toBe(true);
});
test('11', () => {
var solar = Solar.fromYmd(2022, 3, 28);
expect(solar.getFestivals() + '').toBe('全国中小学生安全教育日');
});
test('12', () => {
var solar = Solar.fromYmd(2021, 3, 29);
expect(solar.getFestivals() + '').toBe('全国中小学生安全教育日');
});
test('13', () => {
var solar = Solar.fromYmd(1996, 3, 25);
expect(solar.getFestivals() + '').toBe('全国中小学生安全教育日');
});
test('14', () => {
const solar = Solar.fromYmd(1583, 1, 13);
expect(solar.getLunar().toString()).toBe('一五八二年腊月二十');
});
test('15', () => {
const solar = Solar.fromYmd(1583, 1, 14);
expect(solar.getLunar().toString()).toBe('一五八二年腊月廿一');
});
test('16', () => {
const solarList = Solar.fromBaZi('丙辰', '丁酉', '丙子', '甲午');
const timeList = [];
solarList.forEach(solar => {
timeList.push(solar.toYmdHms());
})
expect(timeList).toStrictEqual(['1976-09-21 12:00:00', '1916-10-06 12:00:00']);
});
test('17', () => {
const solarList = Solar.fromBaZi('己卯', '辛未', '甲戌', '壬申');
const timeList = [];
solarList.forEach(solar => {
timeList.push(solar.toYmdHms());
})
expect(timeList).toStrictEqual(['1999-07-21 16:00:00', '1939-08-05 16:00:00']);
});
test('18', () => {
const solarList = Solar.fromBaZi('庚子', '戊子', '己卯', '庚午');
const timeList = [];
solarList.forEach(solar => {
timeList.push(solar.toYmdHms());
})
expect(timeList).toStrictEqual(['1960-12-17 12:00:00', '1901-01-01 12:00:00']);
});
test('19', () => {
const solarList = Solar.fromBaZi('庚子', '癸未', '乙丑', '丁亥');
const timeList = [];
solarList.forEach(solar => {
timeList.push(solar.toYmdHms());
})
expect(timeList).toStrictEqual(['2020-07-21 22:00:00', '1960-08-05 22:00:00']);
});
test('20', () => {
const solar = Solar.fromYmd(1582, 10, 4);
expect(solar.nextDay(1).toYmd()).toBe('1582-10-15');
});
test('21', () => {
const solar = Solar.fromYmd(1582, 10, 15);
expect(solar.nextDay(-1).toYmd()).toBe('1582-10-04');
});
test('22', () => {
const solar = Solar.fromYmd(1582, 10, 15);
expect(solar.nextDay(-5).toYmd()).toBe('1582-09-30');
});
test('23', () => {
const solarList = Solar.fromBaZi('癸卯', '甲寅', '癸丑', '甲子', 2, 1843);
const timeList = [];
solarList.forEach(solar => {
timeList.push(solar.toYmdHms());
})
expect(timeList).toStrictEqual(['2023-02-24 23:00:00', '1843-02-08 23:00:00']);
});
test('24', () => {
const solarList = Solar.fromBaZi('己亥', '丁丑', '壬寅', '戊申');
const timeList = [];
solarList.forEach(solar => {
timeList.push(solar.toYmdHms());
})
expect(timeList).toStrictEqual(['1960-01-15 16:00:00', '1900-01-29 16:00:00']);
});
test('25', () => {
const solarList = Solar.fromBaZi('己亥', '丙子', '癸酉', '庚申');
const timeList = [];
solarList.forEach(solar => {
timeList.push(solar.toYmdHms());
})
expect(timeList).toStrictEqual(['1959-12-17 16:00:00']);
});
test('26', () => {
const solar = Solar.fromYmd(2023, 8, 31);
expect(solar.nextMonth(2).toYmd()).toBe('2023-10-31');
});
test('27', () => {
const solar = Solar.fromYmd(2023, 8, 31);
expect(solar.nextYear(2).toYmd()).toBe('2025-08-31');
});
test('28', () => {
const solar = Solar.fromYmd(2023, 8, 31);
expect(solar.nextMonth(6).toYmd()).toBe('2024-02-29');
});

View File

@@ -1,13 +1,37 @@
var {SolarSeason} = require('../lunar');
var {SolarMonth} = require('../lunar');
test('toString()', () => {
const season = SolarSeason.fromYm(2019, 5);
expect(season.toString()).toBe('2019.2');
expect(season.next(1).toString()).toBe('2019.3');
const month = SolarMonth.fromYm(2019, 5);
expect(month.toString()).toBe('2019-5');
expect(month.next(1).toString()).toBe('2019-6');
});
test('toFullString()', () => {
const season = SolarSeason.fromYm(2019, 5);
expect(season.toFullString()).toBe('2019年2季度');
expect(season.next(1).toFullString()).toBe('2019年3季度');
const month = SolarMonth.fromYm(2019, 5);
expect(month.toFullString()).toBe('2019年5月');
expect(month.next(1).toFullString()).toBe('2019年6月');
});
test('test1', () => {
const month = SolarMonth.fromYm(2022, 7);
const weeks = month.getWeeks(0);
const lastWeek = weeks[weeks.length - 1];
const days = lastWeek.getDays();
expect(days[0].toFullString()).toBe('2022-07-31 00:00:00 星期日 狮子座');
});
test('test2', () => {
const month = SolarMonth.fromYm(2022, 7);
const weeks = month.getWeeks(0);
const lastWeek = weeks[weeks.length - 1];
const days = lastWeek.getDays();
expect(days[1].toFullString()).toBe('2022-08-01 00:00:00 星期一 (建军节) 狮子座');
});
test('test3', () => {
const month = SolarMonth.fromYm(2022, 7);
const weeks = month.getWeeks(0);
const lastWeek = weeks[weeks.length - 1];
const days = lastWeek.getDays();
expect(days[6].toFullString()).toBe('2022-08-06 00:00:00 星期六 狮子座');
});

View File

@@ -1,13 +1,13 @@
var {SolarMonth} = require('../lunar');
var {SolarSeason} = require('../lunar');
test('toString()', () => {
const month = SolarMonth.fromYm(2019, 5);
expect(month.toString()).toBe('2019-5');
expect(month.next(1).toString()).toBe('2019-6');
const season = SolarSeason.fromYm(2019, 5);
expect(season.toString()).toBe('2019.2');
expect(season.next(1).toString()).toBe('2019.3');
});
test('toFullString()', () => {
const month = SolarMonth.fromYm(2019, 5);
expect(month.toFullString()).toBe('2019年5月');
expect(month.next(1).toFullString()).toBe('2019年6月');
const season = SolarSeason.fromYm(2019, 5);
expect(season.toFullString()).toBe('2019年2季度');
expect(season.next(1).toFullString()).toBe('2019年3季度');
});

View File

@@ -1,4 +1,4 @@
var {SolarUtil} = require('../lunar');
var {SolarUtil, Solar} = require('../lunar');
test('isLeapYear()', () => {
expect(SolarUtil.isLeapYear(2020)).toBe(true);
@@ -9,3 +9,84 @@ test('getDaysOfMonth()', () => {
expect(SolarUtil.getDaysOfMonth(2020, 1)).toBe(31);
expect(SolarUtil.getDaysOfMonth(2021, 2)).toBe(28);
});
test('addDays', () => {
var solar = Solar.fromYmd(2022,1,1).next(1);
expect(solar.getYear()).toBe(2022);
expect(solar.getMonth()).toBe(1);
expect(solar.getDay()).toBe(2);
});
test('addDays2', () => {
var solar = Solar.fromYmd(2022,1,31).next(1);
expect(solar.getYear()).toBe(2022);
expect(solar.getMonth()).toBe(2);
expect(solar.getDay()).toBe(1);
});
test('addDays3', () => {
var solar = Solar.fromYmd(2022,1,1).next(365);
expect(solar.getYear()).toBe(2023);
expect(solar.getMonth()).toBe(1);
expect(solar.getDay()).toBe(1);
});
test('addDays4', () => {
var solar = Solar.fromYmd(2023,1,1).next(-365);
expect(solar.getYear()).toBe(2022);
expect(solar.getMonth()).toBe(1);
expect(solar.getDay()).toBe(1);
});
test('addDays5', () => {
var solar = Solar.fromYmd(1582,10,4).next(1);
expect(solar.getYear()).toBe(1582);
expect(solar.getMonth()).toBe(10);
expect(solar.getDay()).toBe(15);
});
test('addDays6', () => {
var solar = Solar.fromYmd(1582,10,4).next(18);
expect(solar.getYear()).toBe(1582);
expect(solar.getMonth()).toBe(11);
expect(solar.getDay()).toBe(1);
});
test('addDays7', () => {
var solar = Solar.fromYmd(1582,11,1).next(-18);
expect(solar.getYear()).toBe(1582);
expect(solar.getMonth()).toBe(10);
expect(solar.getDay()).toBe(4);
});
test('addDays8', () => {
var solar = Solar.fromYmd(1582,11,1).next(-17);
expect(solar.getYear()).toBe(1582);
expect(solar.getMonth()).toBe(10);
expect(solar.getDay()).toBe(15);
});
test('getDaysBetween', () => {
var days = SolarUtil.getDaysBetween(1582, 10, 4, 1582, 10, 15);
expect(days).toBe(1);
});
test('getDaysBetween1', () => {
var days = SolarUtil.getDaysBetween(1582, 10, 4, 1582, 11, 1);
expect(days).toBe(18);
});
test('getDaysBetween2', () => {
var days = SolarUtil.getDaysBetween(1582, 1, 1, 1583, 1, 1);
expect(days).toBe(355);
});
test('getWeek', () => {
var week = Solar.fromYmd(1582, 10, 1).getWeek();
expect(week).toBe(1);
});
test('getWeek1', () => {
var week = Solar.fromYmd(1582, 10, 15).getWeek();
expect(week).toBe(5);
});

View File

@@ -19,3 +19,21 @@ test('testFromSunday', () => {
expect(week.getFirstDay().toString()).toBe('2019-04-28');
expect(week.getFirstDayInMonth().toString()).toBe('2019-05-01');
});
test('test1', () => {
const start = 0;
const week = SolarWeek.fromYmd(2022, 5, 1, start);
expect(week.getIndex()).toBe(1);
});
test('test2', () => {
const start = 2;
const week = SolarWeek.fromYmd(2021, 5, 4, start);
expect(week.getIndex()).toBe(2);
});
test('test3', () => {
const start = 0;
const week = SolarWeek.fromYmd(2022, 3, 6, start);
expect(week.getIndexInYear()).toBe(11);
});

View File

@@ -53,3 +53,45 @@ test('test9()', () => {
const lunar = solar.getLunar();
expect(lunar.getWuHou()).toBe('蚯蚓结');
});
test('test10', () => {
const solar = Solar.fromYmd(2021,12,21);
const lunar = solar.getLunar();
expect(lunar.getHou()).toBe('冬至 初候');
});
test('test11', () => {
const solar = Solar.fromYmd(2021,12,26);
const lunar = solar.getLunar();
expect(lunar.getHou()).toBe('冬至 二候');
});
test('test12', () => {
const solar = Solar.fromYmd(2021,12,31);
const lunar = solar.getLunar();
expect(lunar.getHou()).toBe('冬至 三候');
});
test('test13', () => {
const solar = Solar.fromYmd(2022,1,5);
const lunar = solar.getLunar();
expect(lunar.getHou()).toBe('小寒 初候');
});
test('test14', () => {
const solar = Solar.fromYmd(2022,5,20);
const lunar = solar.getLunar();
expect(lunar.getHou()).toBe('立夏 三候');
});
test('test15', () => {
const solar = Solar.fromYmd(2022, 8, 22);
const lunar = solar.getLunar();
expect(lunar.getWuHou()).toBe('寒蝉鸣');
});
test('test16', () => {
const solar = Solar.fromYmd(2022, 8, 23);
const lunar = solar.getLunar();
expect(lunar.getWuHou()).toBe('鹰乃祭鸟');
});

View File

@@ -31,3 +31,30 @@ it('test3', () => {
expect(yun.getStartDay()).toBe(0);
expect(yun.getStartSolar().toYmd()).toBe('2020-02-06');
});
it('test4', () => {
const solar = Solar.fromYmdHms(2022, 3, 9, 20, 51, 0);
const lunar = solar.getLunar();
const eightChar = lunar.getEightChar();
const yun = eightChar.getYun(1);
expect(yun.getStartSolar().toYmd()).toBe('2030-12-19');
});
it('test5', () => {
const solar = Solar.fromYmdHms(2022, 3, 9, 20, 51, 0);
const lunar = solar.getLunar();
const eightChar = lunar.getEightChar();
const yun = eightChar.getYun(1, 2);
expect(yun.getStartYear()).toBe(8);
expect(yun.getStartMonth()).toBe(9);
expect(yun.getStartDay()).toBe(2);
expect(yun.getStartSolar().toYmd()).toBe('2030-12-12');
});
it('test6', () => {
const solar = Solar.fromYmdHms(2018, 6, 11, 9, 30, 0);
const lunar = solar.getLunar();
const eightChar = lunar.getEightChar();
const yun = eightChar.getYun(0, 2);
expect(yun.getStartSolar().toYmd()).toBe('2020-03-21');
});

View File

@@ -1,9 +1,10 @@
const {Solar, Lunar, Foto, NineStar, EightChar, SolarWeek, SolarMonth, SolarSeason, SolarHalfYear, SolarYear, LunarMonth, LunarYear, LunarTime, ShouXingUtil, SolarUtil, LunarUtil, FotoUtil, HolidayUtil} = require('./lunar.js')
const {Solar, Lunar, Foto, Tao, NineStar, EightChar, SolarWeek, SolarMonth, SolarSeason, SolarHalfYear, SolarYear, LunarMonth, LunarYear, LunarTime, ShouXingUtil, SolarUtil, LunarUtil, FotoUtil, TaoUtil, HolidayUtil, NineStarUtil, I18n} = require('./lunar.js')
module.exports = {
Solar: Solar,
Lunar: Lunar,
Foto: Foto,
Tao: Tao,
NineStar: NineStar,
EightChar: EightChar,
SolarWeek: SolarWeek,
@@ -18,5 +19,8 @@ module.exports = {
SolarUtil: SolarUtil,
LunarUtil: LunarUtil,
FotoUtil: FotoUtil,
HolidayUtil: HolidayUtil
TaoUtil: TaoUtil,
HolidayUtil: HolidayUtil,
NineStarUtil: NineStarUtil,
I18n: I18n
}

6514
lunar.js

File diff suppressed because one or more lines are too long

View File

@@ -1,6 +1,6 @@
{
"name": "lunar-javascript",
"version": "1.2.10",
"version": "1.6.4",
"description": "lunar is a calendar library for Solar and Chinese Lunar.",
"main": "index.js",
"scripts": {
@@ -50,6 +50,5 @@
"homepage": "https://github.com/6tail/lunar-javascript",
"devDependencies": {
"jest": "^26.6.3"
},
"dependencies": {}
}
}