lunisolar
Version:
专业农历库,支持公历阴历互转,支持各类黄历数据查询,如八字四柱、阴历、神煞宜忌、时辰吉凶、建除十二神、胎神占方、五行纳音等。支持自定义插件。
117 lines (108 loc) • 3.83 kB
text/typescript
import { Lunisolar } from '../../src/class/lunisolar'
import lunisolar from '../../src/index'
import {
FIRST_YEAR,
TERM_MINIMUM_DATES,
TERM_SAME_HEX,
TERM_LIST
} from '../../src/constants/lunarData'
import { _GlobalConfig } from '../../src/config'
import solarTermDateList from '../datas/solarTermDateList'
export function reduceTermList(year: number) {
const binData = TERM_SAME_HEX[TERM_LIST[year - FIRST_YEAR]].toString(2)
const res = []
const res2 = []
let temp = binData.padStart(48, '0')
while (res.length < 24) {
const currDate = parseInt(temp.slice(temp.length - 2), 2)
const minDate = TERM_MINIMUM_DATES[res.length]
res.push(currDate)
res2.push(currDate + minDate)
temp = temp.slice(0, temp.length - 2)
}
return [res, res2]
}
// 测试节气
describe('test Term', () => {
for (const yearOffset in solarTermDateList) {
const year = FIRST_YEAR + Number(yearOffset)
it(`${year}`, () => {
for (const i in solarTermDateList[yearOffset]) {
const month = ('0' + ((Number(i) >> 1) + 1)).slice(-2)
const date = ('0' + solarTermDateList[yearOffset][i]).slice(-2)
const lun = new Lunisolar(`${year}-${month}-${date}`)
let res = lun.solarTerm
if (res instanceof Array) res = null
expect(res?.toString() || null).toBe(_GlobalConfig.locales['zh'].solarTerm[Number(i)])
}
})
}
})
describe('test Lunisolar', () => {
it('1986-10-19 18:20:00', () => {
const lun = lunisolar('1986-10-19 19:20:00')
expect(lun.char8.toString()).toBe('丙寅 戊戌 丙申 戊戌')
})
it('1990-1-27 15:20:00', () => {
const lun = lunisolar('1990-1-27 15:20:00')
expect(lun.char8.toString()).toBe('己巳 丁丑 壬辰 戊申')
})
})
describe('test Lunar', () => {
it('1901-02-19', () => {
const lun = lunisolar('1901-02-19')
expect(lun.lunar.month).toBe(1)
expect(lun.lunar.day).toBe(1)
})
it('1901-02-19 23:10', () => {
const lun = lunisolar('1901-02-19 23:10')
expect(lun.lunar.month).toBe(1)
expect(lun.lunar.day).toBe(2)
})
})
describe('test format', () => {
it('2022/07/18 14:40', () => {
const lsr = lunisolar('2022/07/18 14:40')
expect(lsr.format('YYYY/MM/DD HH:mm:ss SSS')).toBe('2022/07/18 14:40:00 000')
expect(lsr.format('lY年 lMlD lH時')).toBe('二〇二二年 六月二十 未時')
expect(lsr.format('lY年 lM(lL)lD lH時')).toBe('二〇二二年 六月(大)二十 未時')
expect(lsr.format('lYn年 農歷lMn月lDn日 第lHn個時辰')).toBe('2022年 農歷6月20日 第8個時辰')
expect(lsr.format('cY cM cD cH')).toBe('壬寅 丁未 壬申 丁未')
expect(lsr.format('cZ年')).toBe('虎年')
expect(lsr.format('cYs-cYb cMs-cMb cDs-cDb cHs-cHb')).toBe('壬-寅 丁-未 壬-申 丁-未')
})
})
describe('test season', () => {
it('2022/2/1', () => {
const lsr = lunisolar('2022/2/1')
expect(lsr.getSeasonIndex()).toBe(3)
expect(lsr.getSeason()).toBe('冬')
})
it('2022/2/5', () => {
const lsr = lunisolar('2022/2/5')
expect(lsr.getSeasonIndex()).toBe(0)
expect(lsr.getSeason()).toBe('春')
})
it('2022/07/18 14:40', () => {
const lsr = lunisolar('2022/07/18 14:40')
expect(lsr.getSeasonIndex()).toBe(1)
expect(lsr.getSeason()).toBe('夏')
})
it('2022/09/08', () => {
const lsr = lunisolar('2022/09/08')
expect(lsr.getSeasonIndex()).toBe(2)
expect(lsr.getSeason()).toBe('秋')
})
it('2022/11/08', () => {
const lsr = lunisolar('2022/11/08')
expect(lsr.getSeasonIndex()).toBe(3)
expect(lsr.getSeason()).toBe('冬')
})
})
describe('test getMonthBuilder', () => {
it('2022/2/1', () => {
const lsr = lunisolar('2022/9/10')
expect(lsr.getMonthBuilder()[0].branch.value).toBe(9)
expect(lsr.getMonthBuilder(1)[0].branch.value).toBe(8)
})
})