index.test.ts 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  1. import {
  2. getLunarYears,
  3. getYearLeapMonth,
  4. getLunarDate,
  5. getLunarDatesInRange,
  6. getSolarDateFromLunar,
  7. } from "../../src";
  8. describe("solar_lunar", () => {
  9. test("getLunarDate should return correct lunar date for a given solar date", () => {
  10. // 闰月第一天
  11. let result = getLunarDate("2014-10-24");
  12. expect(result).toEqual({
  13. date: '2014-10-24',
  14. lunarYear: 2014,
  15. lunarMon: 9,
  16. lunarDay: 1,
  17. isLeap: true,
  18. zodiac: '马',
  19. yearCyl: '甲午',
  20. monCyl: '甲戌',
  21. dayCyl: '戊辰',
  22. lunarYearCN: '二零一四',
  23. lunarMonCN: '九月',
  24. lunarDayCN: '初一'
  25. })
  26. result = getLunarDate("2057-09-28");
  27. expect(result).toEqual({
  28. date: "2057-09-28",
  29. lunarYear: 2057,
  30. lunarMon: 8,
  31. lunarDay: 30,
  32. isLeap: false,
  33. lunarDayCN: "三十",
  34. lunarMonCN: "八月",
  35. lunarYearCN: "二零五七",
  36. yearCyl: "丁丑",
  37. monCyl: "己酉",
  38. dayCyl: "戊子",
  39. zodiac: "牛",
  40. });
  41. result = getLunarDate("2097-08-07");
  42. expect(result).toEqual({
  43. date: "2097-08-07",
  44. dayCyl: "丙寅",
  45. isLeap: false,
  46. lunarDay: 1,
  47. lunarDayCN: "初一",
  48. lunarMon: 7,
  49. lunarMonCN: "七月",
  50. lunarYear: 2097,
  51. lunarYearCN: "二零九七",
  52. monCyl: "戊申",
  53. yearCyl: "丁巳",
  54. zodiac: "蛇",
  55. });
  56. result = getLunarDate("2001-04-27");
  57. expect(result.isLeap).toBe(false);
  58. result = getLunarDate("2001-05-27");
  59. expect(result.isLeap).toBe(true);
  60. });
  61. test("getSolarDateFromLunar should return correct solar date for a given lunar date", () => {
  62. let result = getSolarDateFromLunar("2001-03-05");
  63. expect(result).toEqual({ date: "2001-03-29", leapMonthDate: undefined });
  64. result = getSolarDateFromLunar("2001-04-05");
  65. expect(result).toEqual({ date: "2001-04-27", leapMonthDate: "2001-05-27" });
  66. });
  67. test("getLunarYears should return correct", () => {
  68. let result = getLunarYears(2001, 2003);
  69. expect(result).toEqual([
  70. {"lunarYear": "辛巳年", "lunarYearCN": "二零零一", "year": 2001},
  71. {"lunarYear": "壬午年", "lunarYearCN": "二零零二", "year": 2002},
  72. {"lunarYear": "癸未年", "lunarYearCN": "二零零三", "year": 2003}
  73. ]);
  74. });
  75. test("getYearLeapMonth should return correct", () => {
  76. let result = getYearLeapMonth(2022);
  77. expect(result).toEqual({"days": 0, "leapMonth": undefined, "leapMonthCN": undefined, "year": 2022});
  78. result = getYearLeapMonth(2023);
  79. expect(result).toEqual({"days": 29, "leapMonth": 2, "leapMonthCN": "闰二月", "year": 2023});
  80. });
  81. test("getLunarDatesInRange should return correct lunar dates for a given solar date range", () => {
  82. let result = getLunarDatesInRange("2001-05-21", "2001-05-26");
  83. expect(result).toEqual([
  84. {
  85. date: "2001-05-21",
  86. lunarYear: 2001,
  87. lunarMon: 4,
  88. lunarDay: 29,
  89. isLeap: false,
  90. zodiac: "蛇",
  91. yearCyl: "辛巳",
  92. monCyl: "癸巳",
  93. dayCyl: "甲申",
  94. lunarYearCN: "二零零一",
  95. lunarMonCN: "四月",
  96. lunarDayCN: "廿九",
  97. },
  98. {
  99. date: "2001-05-22",
  100. lunarYear: 2001,
  101. lunarMon: 4,
  102. lunarDay: 30,
  103. isLeap: false,
  104. zodiac: "蛇",
  105. yearCyl: "辛巳",
  106. monCyl: "癸巳",
  107. dayCyl: "乙酉",
  108. lunarYearCN: "二零零一",
  109. lunarMonCN: "四月",
  110. lunarDayCN: "三十",
  111. },
  112. {
  113. date: "2001-05-23",
  114. lunarYear: 2001,
  115. lunarMon: 4,
  116. lunarDay: 1,
  117. isLeap: true,
  118. zodiac: "蛇",
  119. yearCyl: "辛巳",
  120. monCyl: "癸巳",
  121. dayCyl: "丙戌",
  122. lunarYearCN: "二零零一",
  123. lunarMonCN: "四月",
  124. lunarDayCN: "初一",
  125. },
  126. {
  127. date: "2001-05-24",
  128. lunarYear: 2001,
  129. lunarMon: 4,
  130. lunarDay: 2,
  131. isLeap: true,
  132. zodiac: "蛇",
  133. yearCyl: "辛巳",
  134. monCyl: "癸巳",
  135. dayCyl: "丁亥",
  136. lunarYearCN: "二零零一",
  137. lunarMonCN: "四月",
  138. lunarDayCN: "初二",
  139. },
  140. {
  141. date: "2001-05-25",
  142. lunarYear: 2001,
  143. lunarMon: 4,
  144. lunarDay: 3,
  145. isLeap: true,
  146. zodiac: "蛇",
  147. yearCyl: "辛巳",
  148. monCyl: "癸巳",
  149. dayCyl: "戊子",
  150. lunarYearCN: "二零零一",
  151. lunarMonCN: "四月",
  152. lunarDayCN: "初三",
  153. },
  154. {
  155. date: "2001-05-26",
  156. lunarYear: 2001,
  157. lunarMon: 4,
  158. lunarDay: 4,
  159. isLeap: true,
  160. zodiac: "蛇",
  161. yearCyl: "辛巳",
  162. monCyl: "癸巳",
  163. dayCyl: "己丑",
  164. lunarYearCN: "二零零一",
  165. lunarMonCN: "四月",
  166. lunarDayCN: "初四",
  167. },
  168. ]);
  169. });
  170. });