美文网首页vue、javascript
vue中通过时间转换农历得方法封装

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

作者: 源大侠 | 来源:发表于2020-04-07 12:56 被阅读0次

    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中通过时间转换农历得方法封装

        本文链接:https://www.haomeiwen.com/subject/yeggphtx.html