获取农历日期

let CalendarData = new Array(100)
let madd = new Array(12)
let tgString = '甲乙丙丁戊己庚辛壬癸'
let dzString = '子丑寅卯辰巳午未申酉戌亥'
let numString = '一二三四五六七八九十'
let monString = '正二三四五六七八九十冬腊'
let sx = '鼠牛虎兔龙蛇马羊猴鸡狗猪'
let cYear, cMonth, cDay, TheDate
CalendarData = ['0xA4B', '0x5164B', '0x6A5', '0x6D4', '0x415B5', '0x2B6', '0x957', '0x2092F', '0x497', '0x60C96', '0xD4A', '0xEA5', '0x50DA9', '0x5AD',
    '0x2B6', '0x3126E', '0x92E', '0x7192D', '0xC95', '0xD4A', '0x61B4A', '0xB55', '0x56A', '0x4155B', '0x25D', '0x92D', '0x2192B', '0xA95', '0x71695', '0x6CA',
    '0xB55', '0x50AB5', '0x4DA', '0xA5B', '0x30A57', '0x52B', '0x8152A', '0xE95', '0x6AA', '0x615AA', '0xAB5', '0x4B6', '0x414AE', '0xA57', '0x526', '0x31D26',
    '0xD95', '0x70B55', '0x56A', '0x96D', '0x5095D', '0x4AD', '0xA4D', '0x41A4D', '0xD25', '0x81AA5', '0xB54', '0xB6A', '0x612DA', '0x95B', '0x49B', '0x41497',
    '0xA4B', '0xA164B', '0x6A5', '0x6D4', '0x615B4', '0xAB6', '0x957', '0x5092F', '0x497', '0x64B', '0x30D4A', '0xEA5', '0x80D65', '0x5AC', '0xAB6', '0x5126D',
    '0x92E', '0xC96', '0x41A95', '0xD4A', '0xDA5', '0x20B55', '0x56A', '0x7155B', '0x25D', '0x92D', '0x5192B', '0xA95', '0xB4A', '0x416AA', '0xAD5', '0x90AB5',
    '0x4BA', '0xA5B', '0x60A57', '0x52B', '0xA93', '0x40E95']
madd[0] = 0
madd[1] = 31
madd[2] = 59
madd[3] = 90
madd[4] = 120
madd[5] = 151
madd[6] = 181
madd[7] = 212
madd[8] = 243
madd[9] = 273
madd[10] = 304
madd[11] = 334
function GetBit(m, n) {
    return (m >> n) & 1
}
function e2c() {
    TheDate = (arguments.length !== 3) ? new Date() : new Date(arguments[0], arguments[1], arguments[2])
    // console.log(TheDate)
    let total, m, n, k
    let isEnd = false
    let tmp = TheDate.getYear()
    if (tmp < 1900) {
        tmp += 1900
    }
    total = (tmp - 1921) * 365 + Math.floor((tmp - 1921) / 4) + madd[TheDate.getMonth()] + TheDate.getDate() - 38
    if (TheDate.getYear() % 4 === 0 && TheDate.getMonth() > 1) {
        total++
    }
    for (m = 0; ; m++) {
        k = (CalendarData[m] < 0xfff) ? 11 : 12
        for (n = k; n >= 0; n--) {
            if (total <= 29 + GetBit(CalendarData[m], n)) {
                isEnd = true
                break
            }
            total = total - 29 - GetBit(CalendarData[m], n)
        }
        if (isEnd) break
    }
    cYear = 1921 + m
    cMonth = k - n + 1
    cDay = total
    if (k === 12) {
        if (cMonth === Math.floor(CalendarData[m] / 0x10000) + 1) {
            cMonth = 1 - cMonth
        }
        if (cMonth > Math.floor(CalendarData[m] / 0x10000) + 1) {
            cMonth--
        }
    }
}
function GetcDateString() {
    let tmp = ''
    tmp += tgString.charAt((cYear - 4) % 10)
    tmp += dzString.charAt((cYear - 4) % 12)
    tmp += '('
    tmp += sx.charAt((cYear - 4) % 12)
    tmp += ')年 '
    if (cMonth < 1) {
        tmp += '(闰)'
        tmp += monString.charAt(-cMonth - 1)
    } else {
        tmp += monString.charAt(cMonth - 1)
    }
    tmp += '月'
    tmp += (cDay < 11) ? '初' : ((cDay < 20) ? '十' : ((cDay < 30) ? '廿' : '三十'))
    if (cDay % 10 !== 0 || cDay === 10) {
        tmp += numString.charAt((cDay - 1) % 10)
    }
    return tmp
}
function GetLunarDay(solarYear, solarMonth, solarDay) {
    solarMonth = (parseInt(solarMonth) > 0) ? (solarMonth - 1) : 11
    e2c(solarYear, solarMonth, solarDay)
    return GetcDateString()
}
let D = new Date()
let yy = D.getFullYear()
let mm = D.getMonth() + 1
let dd = D.getDate()
if (yy < 100) yy = '19' + yy
const showCalendar = function () {
    let dateString = GetLunarDay(yy, mm, dd)
    return dateString
}
export default showCalendar
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值