vue中通过时间转换农历得方法封装

const method = {

  toLunar(solarYear, solarMonth, solarDay) {

    // 定义全局变量

    var CalendarData = new Array(100)

    var madd = new Array(12)

    var numString = '一二三四五六七八九十'

    var monString = '正二三四五六七八九十冬腊'

    // eslint-disable-next-line no-unused-vars

    var cYear, cMonth, cDay, TheDate

    // eslint-disable-next-line no-array-constructor

    CalendarData = new Array(

      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])

      var total, m, n, k

      var isEnd = false

      var 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() {

      var tmp = ''

      if (cDay == 1) {

        if (cMonth < 1) {

          // tmp += "(闰)";

          tmp += monString.charAt(-cMonth - 1)

        } else {

          tmp += monString.charAt(cMonth - 1)

        }

        tmp += '月'

      } else {

        tmp += cDay < 11 ? '初' : cDay < 20 ? '十' : cDay < 30 ? '廿' : '三十'

        if (cDay % 10 != 0 || cDay == 10) {

          tmp += numString.charAt((cDay - 1) % 10)

        }

      }

      return tmp

    }

    solarMonth = parseInt(solarMonth) > 0 ? solarMonth - 1 : 11

    e2c(solarYear, solarMonth, solarDay)

    return GetcDateString()

  }

}

export default method

你可能感兴趣的:(vue中通过时间转换农历得方法封装)