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

Compare commits

...

36 Commits

Author SHA1 Message Date
6tail
4c45a59f79 v1.7.7 新增2026年法定假日。 2025-11-05 11:04:25 +08:00
6tail
eecd5d12c8 v1.7.6 修复吉神宜驱、凶神宜忌的错误;修复农历闰月及后续月份的干支错误。 2025-10-21 09:16:46 +08:00
6tail
1409f94e90 v1.7.5 修复候的错别字;更新△T参数;优化吉神宜驱、凶神宜忌。 2025-10-01 12:25:11 +08:00
6tail
8ceab84986 v1.7.4 修复极端情况下八字转公历时刻出现遗漏的问题。 2025-09-07 08:56:46 +08:00
6tail
8b374be752 v1.7.3 修复身宫报错的问题。 2025-04-29 15:39:49 +08:00
6tail
b2600d7c5a v1.7.2 修复八字身宫计算错误的问题。 2025-04-07 20:44:08 +08:00
6tail
f57c4887a6 v1.7.1 调整每日宜忌的默认流派;更新2018之后的△T参数。 2025-03-05 21:13:21 +08:00
6tail
2dcf35b1e8 v1.7.0 修复每日宜忌错别字;去除每日宜忌的重复项。 2025-02-12 16:12:20 +08:00
6tail
d038adead7 v1.6.13 新增2025年法定假日数据。 2024-11-12 19:45:30 +08:00
6tail
abfcd39fe6 v1.6.12 修复八字转阳历存在遗漏的问题。 2024-03-17 13:55:47 +08:00
6tail
10e8041f21 v1.6.11 修复节气当天获取下一节气仍为当前节气的问题;完善package.json中author信息;修复每日宜忌存在重复项的问题;修复八字转阳历存在遗漏的问题。 2024-02-29 11:50:53 +08:00
6tail
5ab29be0bf Merge pull request #34 from Stitch-June/patch-1
bugfix getDayXiongSha
2024-02-28 21:16:08 +08:00
史迪仔
9e159c109f bugfix getDayXiongSha 2024-02-28 01:20:50 +08:00
6tail
4e66c329b6 v1.6.10 八字转阳历结果按时间先后排序,转换速度大幅提升。 2024-02-06 14:52:32 +08:00
6tail
9f3e2d29bd v1.6.9 修复命宫、身宫的错误。 2024-01-30 22:16:44 +08:00
6tail
ce267b4942 v1.6.8 修复八字转阳历为空的问题;修复一处法定假日数据错误;十神优化。 2024-01-03 19:50:31 +08:00
6tail
6581f01956 v1.6.7 修复星期错误的问题。 2023-11-09 19:28:19 +08:00
6tail
80a96cb68e v1.6.6 修复星期错误的问题;修正逐日胎神数据。 2023-11-07 22:10:31 +08:00
6tail
b9ceeea2eb v1.6.5 更新2024年法定假日数据;十神优化。 2023-10-25 20:25:51 +08:00
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
20 changed files with 5369 additions and 931 deletions

1
.gitignore vendored
View File

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

46
CHANGELOG.md Normal file
View File

@@ -0,0 +1,46 @@
# Changelog
## [1.6.10] - 2024-02-06
1. 八字转阳历结果按时间先后排序,转换速度大幅提升。
## [1.6.11] - 2024-02-29
1. 修复节气当天获取下一节气仍为当前节气的问题。
2. 完善package.json中author信息。
3. 修复每日宜忌存在重复项的问题。
4. 修复八字转阳历存在遗漏的问题。
## [1.6.12] - 2024-03-17
1. 修复八字转阳历存在遗漏的问题。
## [1.6.13] - 2024-11-12
1. 新增2025年法定假日数据。
## [1.7.0] - 2025-02-12
1. 修复每日宜忌错别字。
2. 去除每日宜忌的重复项。
## [1.7.1] - 2025-03-05
1. 调整每日宜忌的默认流派。
2. 更新2018之后的△T参数。
## [1.7.2] - 2025-04-07
1. 修复八字身宫计算错误的问题。
## [1.7.3] - 2025-04-29
1. 修复身宫报错的问题。
## [1.7.4] - 2025-09-07
1. 修复极端情况下八字转公历时刻出现遗漏的问题。
## [1.7.5] - 2025-10-01
1. 修复:候的错别字。
2. 优化更新△T参数。
3. 优化:吉神宜驱、凶神宜忌。
## [1.7.6] - 2025-10-21
1. 修复:吉神宜驱、凶神宜忌的错误。
2. 修复:农历闰月及后续月份的干支错误。
## [1.7.7] - 2025-11-05
1. 新增2026年法定假日。

View File

@@ -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

@@ -177,3 +177,84 @@ test('test11', () => {
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('甲寅');
});
test('test19', () => {
const solarList = Solar.fromBaZi('丁丑','癸卯','癸丑','辛酉', 2, 1900);
const timeList = [];
solarList.forEach(solar => {
timeList.push(solar.toYmdHms());
})
expect(timeList).toStrictEqual(['1937-03-27 18:00:00', '1997-03-12 18:00:00']);
});
test('test20', () => {
const lunar = Solar.fromYmdHms(2024, 1, 29, 9, 30, 0).getLunar();
const eightChar = lunar.getEightChar();
expect(eightChar.getMingGong()).toBe('癸亥');
expect(eightChar.getShenGong()).toBe('己未');
});
test('test21', () => {
expect(Solar.fromYmdHms(1990, 1, 27, 0, 0, 0).getLunar().getEightChar().getShenGong()).toBe('丙寅');
});
test('test23', () => {
expect(Solar.fromYmdHms(2019, 3, 7, 8, 0, 0).getLunar().getEightChar().getMingGong()).toBe('甲戌');
});
test('test24', () => {
expect(Solar.fromYmdHms(2019, 3, 27, 2, 0, 0).getLunar().getEightChar().getMingGong()).toBe('丁丑');
});
test('test25', () => {
expect(Lunar.fromYmdHms(1994, 5, 20, 18, 0 ,0).getEightChar().getMingGong()).toBe('丙寅');
});
test('test26', () => {
const lunar = Solar.fromYmdHms(1986, 2, 16, 8, 0, 0).getLunar();
const eightChar = lunar.getEightChar();
expect(eightChar.getMingGong()).toBe('己亥');
expect(eightChar.getShenGong()).toBe('乙未');
});
test('test27', () => {
const lunar = Solar.fromYmdHms(1972, 11, 27, 10, 0, 0).getLunar();
const eightChar = lunar.getEightChar();
expect(eightChar.getShenGong()).toBe('乙巳');
});
test('test28', () => {
const solarList = Solar.fromBaZi('丁卯','丁未','甲申','乙丑', 1, 1900);
const timeList = [];
solarList.forEach(solar => {
timeList.push(solar.toYmdHms());
})
expect(timeList).toStrictEqual(['1987-08-03 02:00:00']);
});
test('test29', () => {
const solarList = Solar.fromBaZi('壬申','壬寅','庚辰','甲申', 1, 1801);
const timeList = [];
solarList.forEach(solar => {
timeList.push(solar.toYmdHms());
})
expect(timeList).toStrictEqual(['1812-02-18 16:00:00', '1992-03-05 15:00:00']);
});

View File

@@ -13,3 +13,8 @@ test('test2()', () => {
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

@@ -51,3 +51,12 @@ test('testRemove', () => {
holiday = HolidayUtil.getHoliday('2010-01-01');
expect(holiday).toBe(null);
});
test('test2025', () => {
let names = HolidayUtil.NAMES;
names[0] = '元旦节';
HolidayUtil.fix(names, '');
const holiday = HolidayUtil.getHoliday(2025, 1, 1);
expect(holiday.getName()).toBe('元旦节');
});

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,12 +88,12 @@ 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()['DA_XUE'].toYmdHms()).toBe('2050-12-07 06:41:00');
expect(lunar.getJieQiTable()['DA_XUE'].toYmdHms()).toBe('2050-12-07 06:41:54');
});
test('test9', () => {
@@ -103,3 +103,14 @@ test('test9', () => {
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:12');
});
test('test11', () => {
const lunar = Solar.fromYmd(2024, 2, 4).getLunar();
expect(lunar.getPrevJie(true).getName()).toBe('立春');
expect(lunar.getNextJie(true).getName()).toBe('惊蛰');
});

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('二〇二一年四月廿七');
@@ -568,7 +558,7 @@ test('test051', () => {
test('test052', () => {
const lunar = Solar.fromYmd(2011, 11, 12).getLunar();
expect(lunar.getDayPositionTai()).toBe('厕灶厨 外西南');
expect(lunar.getDayPositionTai()).toBe('厨灶厕 外西南');
});
test('test053', () => {
@@ -590,3 +580,105 @@ 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('九一七年冬月十六');
});
test('test072', () => {
const solar = Solar.fromYmd(1991, 2, 15);
const lunar = solar.getLunar();
expect(lunar.toString()).toBe('一九九一年正月初一');
expect(lunar.getYearInGanZhi()).toBe('辛未');
expect(lunar.getYearShengXiao()).toBe('羊');
});
test('test073', () => {
const solar = Lunar.fromYmd(2024, 10, 10).getSolar();
expect(solar.toString()).toBe('2024-11-10');
});
test('test100', () => {
const lunar = Solar.fromYmd(2025, 9, 16).getLunar();
expect(lunar.getDayJiShen().toString()).toBe('时德,阳德,民日,玉宇,司命');
expect(lunar.getDayXiongSha().toString()).toBe('河魁,死神,天吏,致死,往亡');
});
test('test101', () => {
const lunar = Solar.fromYmd(2025, 12, 15).getLunar();
expect(lunar.getMonthZhiIndex()).toBe(0);
expect(lunar.getDayInGanZhi().toString()).toBe('戊午');
expect(lunar.getDayJiShen().toString()).toBe('阳德,六仪,续世,解神,司命');
expect(lunar.getDayXiongSha().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

@@ -88,7 +88,17 @@ test('test17', () => {
expect(year.getYun()).toBe('八运');
});
test('test18', () => {
const year = LunarYear.fromYear(2022);
expect(year.getJieQiJulianDays()).toStrictEqual([2459555.7478605337, 2459570.499405936, 2459585.217980813, 2459599.9437018055, 2459614.7018054826, 2459629.5297495862, 2459644.446920318, 2459659.4814200983, 2459674.6389274267, 2459689.9334118855, 2459705.3512322665, 2459720.890569021, 2459736.517794922, 2459752.2178259823, 2459767.9429320656, 2459783.6713957503, 2459799.3534378354, 2459814.969435438, 2459830.480632029, 2459845.8774438635, 2459861.140466851, 2459876.2746654437, 2459891.281458942, 2459906.1807667296, 2459920.9903281447, 2459935.741672728, 2459950.461561025, 2459965.187040542, 2459979.9460747372, 2459994.7736723446, 2460009.6916930582]);
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

@@ -29,7 +29,7 @@ test('9', () => {
});
test('10', () => {
expect(SolarUtil.isLeapYear(1500)).toBe(false);
expect(SolarUtil.isLeapYear(1500)).toBe(true);
});
test('11', () => {
@@ -56,3 +56,96 @@ 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(['1916-10-06 12:00:00', '1976-09-21 12:00:00']);
});
test('17', () => {
const solarList = Solar.fromBaZi('己卯', '辛未', '甲戌', '壬申');
const timeList = [];
solarList.forEach(solar => {
timeList.push(solar.toYmdHms());
})
expect(timeList).toStrictEqual(['1939-08-05 16:00:00', '1999-07-21 16:00:00']);
});
test('18', () => {
const solarList = Solar.fromBaZi('庚子', '戊子', '己卯', '庚午');
const timeList = [];
solarList.forEach(solar => {
timeList.push(solar.toYmdHms());
})
expect(timeList).toStrictEqual(['1901-01-01 12:00:00', '1960-12-17 12:00:00']);
});
test('19', () => {
const solarList = Solar.fromBaZi('庚子', '癸未', '乙丑', '丁亥');
const timeList = [];
solarList.forEach(solar => {
timeList.push(solar.toYmdHms());
})
expect(timeList).toStrictEqual(['1960-08-05 22:00:00', '2020-07-21 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(['1843-02-09 00:00:00', '2023-02-25 00:00:00']);
});
test('24', () => {
const solarList = Solar.fromBaZi('己亥', '丁丑', '壬寅', '戊申');
const timeList = [];
solarList.forEach(solar => {
timeList.push(solar.toYmdHms());
})
expect(timeList).toStrictEqual(['1900-01-29 16:00:00', '1960-01-15 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,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

@@ -1,4 +1,4 @@
var {SolarWeek,SolarUtil} = require('../lunar');
var {SolarWeek,SolarUtil,Solar} = require('../lunar');
test('testFromMonday', () => {
const start = 1;
@@ -37,3 +37,41 @@ test('test3', () => {
const week = SolarWeek.fromYmd(2022, 3, 6, start);
expect(week.getIndexInYear()).toBe(11);
});
test('test4', () => {
expect(Solar.fromYmd(1129, 11, 17).getWeek()).toBe(0);
});
test('test5', () => {
expect(Solar.fromYmd(1129, 11, 1).getWeek()).toBe(5);
});
test('test6', () => {
expect(Solar.fromYmd(8, 11, 1).getWeek()).toBe(4);
});
test('test7', () => {
expect(Solar.fromYmd(1582, 9, 30).getWeek()).toBe(0);
});
test('test8', () => {
expect(Solar.fromYmd(1582, 1, 1).getWeek()).toBe(1);
});
test('test9', () => {
expect(Solar.fromYmd(1500, 2, 29).getWeek()).toBe(6);
});
test('test10', () => {
expect(Solar.fromYmd(9865, 7, 26).getWeek()).toBe(3);
});
test('test11', () => {
expect(Solar.fromYmd(1961, 9, 30).getWeek()).toBe(6);
expect(Solar.fromYmdHms(1961, 9, 30, 23, 59, 59).getWeek()).toBe(6);
});
test('test12', () => {
expect(Solar.fromYmdHms(2021, 9, 15, 0, 0, 0).getWeek()).toBe(3);
expect(Solar.fromYmdHms(2021, 9, 15, 23, 59, 59).getWeek()).toBe(3);
});

View File

@@ -83,3 +83,15 @@ test('test14', () => {
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

@@ -1,4 +1,4 @@
const {Solar, Lunar, Foto, Tao, NineStar, EightChar, SolarWeek, SolarMonth, SolarSeason, SolarHalfYear, SolarYear, LunarMonth, LunarYear, LunarTime, ShouXingUtil, SolarUtil, LunarUtil, FotoUtil, TaoUtil, 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,
@@ -20,5 +20,7 @@ module.exports = {
LunarUtil: LunarUtil,
FotoUtil: FotoUtil,
TaoUtil: TaoUtil,
HolidayUtil: HolidayUtil
HolidayUtil: HolidayUtil,
NineStarUtil: NineStarUtil,
I18n: I18n
}

5702
lunar.js

File diff suppressed because one or more lines are too long

View File

@@ -1,7 +1,7 @@
{
"name": "lunar-javascript",
"version": "1.2.34",
"description": "lunar is a calendar library for Solar and Chinese Lunar.",
"version": "1.7.7",
"description": "lunar是一款无第三方依赖的公历(阳历)、农历(阴历、老黄历)、佛历和道历工具,支持星座、儒略日、干支、生肖、节气、节日、彭祖百忌、每日宜忌、吉神宜趋、凶煞宜忌、吉神(喜神/福神/财神/阳贵神/阴贵神)方位、胎神方位、冲煞、纳音、星宿、八字、五行、十神、建除十二值星、青龙名堂等十二神、黄道日及吉凶等。lunar is a calendar library for Solar and Chinese Lunar.",
"main": "index.js",
"scripts": {
"test": "jest"
@@ -42,7 +42,7 @@
"青龙名堂等十二神",
"黄道黑道日"
],
"author": "6tail",
"author": "6tail <6tail@6tail.cn> (https://6tail.cn)",
"license": "MIT",
"bugs": {
"url": "https://github.com/6tail/lunar-javascript/issues"