/** 填充0 */ export const fillWithZero = ( target , length ) => { return ( Array ( length ) . join ( '0' ) + target ) . slice ( - length ) ; } ; param date param field export const formatDate = ( date , field = 'day' ) => { const yearStr = date . getFullYear ( ) ; const month = date . getMonth ( ) + 1 ; const monthStr = fillWithZero ( month , 2 ) ; const day = date . getDate ( ) ; const dayStr = fillWithZero ( day , 2 ) ; switch ( field ) { case 'year' : return `${ yearStr }` ; case 'month' : return `${ yearStr }-${ monthStr }` ; case 'day' : return `${ yearStr }-${ monthStr }-${ dayStr }` ; } } ; /** 小程序中Array.indexOf的实现 */ export const indexOf = ( array , target ) => { let resultIndex = - 1 ; if ( ! array ) { return resultIndex ; } array . every ( ( value , index ) => { if ( value === target ) { resultIndex = index ; return false ; } return true ; } ) ; return resultIndex ; } ; charset Author Version 公历转农历 农历转公历 export type LunarInfo = { /** 生肖 */ Animal : '鼠' | '牛' | '虎' | '兔' | '龙' | '蛇' | '马' | '羊' | '猴' | '鸡' | '狗' | '猪' ; /** 农历 日 */ IDayCn : string ; /** 农历 月 */ IMonthCn : string ; /** 节气 */ Term : '小寒' | '大寒' | '立春' | '雨水' | '惊蛰' | '春分' | '清明' | '谷雨' | '立夏' | '小满' | '芒种' | '夏至' | '小暑' | '大暑' | '立秋' | '处暑' | '白露' | '秋分' | '寒露' | '霜降' | '立冬' | '小雪' | '大雪' | '冬至' | null ; /** 星座 */ astro : string ; /** 公历 日 */ cDay : number ; /** 公历 月 */ cMonth : number ; /** 公历 年 */ cYear : number ; /** 天干地支纪年 日 */ gzDay : string ; /** 天干地支纪年 月 */ gzMonth : string ; /** 天干地支纪年 年 */ gzYear : string ; /** 是否是闰月 */ isLeap : boolean ; /** 是否是节气 */ isTerm : boolean ; /** 是否是今天 */ isToday : boolean ; /** 农历 日 */ lDay : number ; /** 农历 月 */ lMonth : number ; /** 农历 年 */ lYear : number ; /** 一周的第几天，1~7 */ nWeek : number ; /** 星期 */ ncWeek : string ; } ; export const CalendarTools = { Array return lunarInfo : [ 0x04bd8 , 0x04ae0 , 0x0a570 , 0x054d5 , 0x0d260 , 0x0d950 , 0x16554 , 0x056a0 , 0x09ad0 , 0x055d2 , 0x04ae0 , 0x0a5b6 , 0x0a4d0 , 0x0d250 , 0x1d255 , 0x0b540 , 0x0d6a0 , 0x0ada2 , 0x095b0 , 0x14977 , 0x04970 , 0x0a4b0 , 0x0b4b5 , 0x06a50 , 0x06d40 , 0x1ab54 , 0x02b60 , 0x09570 , 0x052f2 , 0x04970 , 0x06566 , 0x0d4a0 , 0x0ea50 , 0x06e95 , 0x05ad0 , 0x02b60 , 0x186e3 , 0x092e0 , 0x1c8d7 , 0x0c950 , 0x0d4a0 , 0x1d8a6 , 0x0b550 , 0x056a0 , 0x1a5b4 , 0x025d0 , 0x092d0 , 0x0d2b2 , 0x0a950 , 0x0b557 , 0x06ca0 , 0x0b550 , 0x15355 , 0x04da0 , 0x0a5b0 , 0x14573 , 0x052b0 , 0x0a9a8 , 0x0e950 , 0x06aa0 , 0x0aea6 , 0x0ab50 , 0x04b60 , 0x0aae4 , 0x0a570 , 0x05260 , 0x0f263 , 0x0d950 , 0x05b57 , 0x056a0 , 0x096d0 , 0x04dd5 , 0x04ad0 , 0x0a4d0 , 0x0d4d4 , 0x0d250 , 0x0d558 , 0x0b540 , 0x0b6a0 , 0x195a6 , 0x095b0 , 0x049b0 , 0x0a974 , 0x0a4b0 , 0x0b27a , 0x06a50 , 0x06d40 , 0x0af46 , 0x0ab60 , 0x09570 , 0x04af5 , 0x04970 , 0x064b0 , 0x074a3 , 0x0ea50 , 0x06b58 , 0x05ac0 , 0x0ab60 , 0x096d5 , 0x092e0 , 0x0c960 , 0x0d954 , 0x0d4a0 , 0x0da50 , 0x07552 , 0x056a0 , 0x0abb7 , 0x025d0 , 0x092d0 , 0x0cab5 , 0x0a950 , 0x0b4a0 , 0x0baa4 , 0x0ad50 , 0x055d9 , 0x04ba0 , 0x0a5b0 , 0x15176 , 0x052b0 , 0x0a930 , 0x07954 , 0x06aa0 , 0x0ad50 , 0x05b52 , 0x04b60 , 0x0a6e6 , 0x0a4e0 , 0x0d260 , 0x0ea65 , 0x0d530 , 0x05aa0 , 0x076a3 , 0x096d0 , 0x04afb , 0x04ad0 , 0x0a4d0 , 0x1d0b6 , 0x0d250 , 0x0d520 , 0x0dd45 , 0x0b5a0 , 0x056d0 , 0x055b2 , 0x049b0 , 0x0a577 , 0x0a4b0 , 0x0aa50 , 0x1b255 , 0x06d20 , 0x0ada0 , 0x14b63 , 0x09370 , 0x049f8 , 0x04970 , 0x064b0 , 0x168a6 , 0x0ea50 , 0x06b20 , 0x1a6c4 , 0x0aae0 , 0x0a2e0 , 0x0d2e3 , 0x0c960 , 0x0d557 , 0x0d4a0 , 0x0da50 , 0x05d55 , 0x056a0 , 0x0a6d0 , 0x055d4 , 0x052d0 , 0x0a9b8 , 0x0a950 , 0x0b4a0 , 0x0b6a6 , 0x0ad50 , 0x055a0 , 0x0aba4 , 0x0a5b0 , 0x052b0 , 0x0b273 , 0x06930 , 0x07337 , 0x06aa0 , 0x0ad50 , 0x14b55 , 0x04b60 , 0x0a570 , 0x054e4 , 0x0d160 , 0x0e968 , 0x0d520 , 0x0daa0 , 0x16aa6 , 0x056d0 , 0x04ae0 , 0x0a9d4 , 0x0a2d0 , 0x0d150 , 0x0f252 , 0x0d520 ] , Array return solarMonth : [ 31 , 28 , 31 , 30 , 31 , 30 , 31 , 31 , 30 , 31 , 30 , 31 ] , Array return Gan : [ '\u7532' , '\u4e59' , '\u4e19' , '\u4e01' , '\u620a' , '\u5df1' , '\u5e9a' , '\u8f9b' , '\u58ec' , '\u7678' ] , Array trans return Zhi : [ '\u5b50' , '\u4e11' , '\u5bc5' , '\u536f' , '\u8fb0' , '\u5df3' , '\u5348' , '\u672a' , '\u7533' , '\u9149' , '\u620c' , '\u4ea5' ] , Array trans return Animals : [ '\u9f20' , '\u725b' , '\u864e' , '\u5154' , '\u9f99' , '\u86c7' , '\u9a6c' , '\u7f8a' , '\u7334' , '\u9e21' , '\u72d7' , '\u732a' ] , Array trans return solarTerm : [ '\u5c0f\u5bd2' , '\u5927\u5bd2' , '\u7acb\u6625' , '\u96e8\u6c34' , '\u60ca\u86f0' , '\u6625\u5206' , '\u6e05\u660e' , '\u8c37\u96e8' , '\u7acb\u590f' , '\u5c0f\u6ee1' , '\u8292\u79cd' , '\u590f\u81f3' , '\u5c0f\u6691' , '\u5927\u6691' , '\u7acb\u79cb' , '\u5904\u6691' , '\u767d\u9732' , '\u79cb\u5206' , '\u5bd2\u9732' , '\u971c\u964d' , '\u7acb\u51ac' , '\u5c0f\u96ea' , '\u5927\u96ea' , '\u51ac\u81f3' ] , Array return sTermInfo : [ '9778397bd097c36b0b6fc9274c91aa' , '97b6b97bd19801ec9210c965cc920e' , '97bcf97c3598082c95f8c965cc920f' , '97bd0b06bdb0722c965ce1cfcc920f' , 'b027097bd097c36b0b6fc9274c91aa' , '97b6b97bd19801ec9210c965cc920e' , '97bcf97c359801ec95f8c965cc920f' , '97bd0b06bdb0722c965ce1cfcc920f' , 'b027097bd097c36b0b6fc9274c91aa' , '97b6b97bd19801ec9210c965cc920e' , '97bcf97c359801ec95f8c965cc920f' , '97bd0b06bdb0722c965ce1cfcc920f' , 'b027097bd097c36b0b6fc9274c91aa' , '9778397bd19801ec9210c965cc920e' , '97b6b97bd19801ec95f8c965cc920f' , '97bd09801d98082c95f8e1cfcc920f' , '97bd097bd097c36b0b6fc9210c8dc2' , '9778397bd197c36c9210c9274c91aa' , '97b6b97bd19801ec95f8c965cc920e' , '97bd09801d98082c95f8e1cfcc920f' , '97bd097bd097c36b0b6fc9210c8dc2' , '9778397bd097c36c9210c9274c91aa' , '97b6b97bd19801ec95f8c965cc920e' , '97bcf97c3598082c95f8e1cfcc920f' , '97bd097bd097c36b0b6fc9210c8dc2' , '9778397bd097c36c9210c9274c91aa' , '97b6b97bd19801ec9210c965cc920e' , '97bcf97c3598082c95f8c965cc920f' , '97bd097bd097c35b0b6fc920fb0722' , '9778397bd097c36b0b6fc9274c91aa' , '97b6b97bd19801ec9210c965cc920e' , '97bcf97c3598082c95f8c965cc920f' , '97bd097bd097c35b0b6fc920fb0722' , '9778397bd097c36b0b6fc9274c91aa' , '97b6b97bd19801ec9210c965cc920e' , '97bcf97c359801ec95f8c965cc920f' , '97bd097bd097c35b0b6fc920fb0722' , '9778397bd097c36b0b6fc9274c91aa' , '97b6b97bd19801ec9210c965cc920e' , '97bcf97c359801ec95f8c965cc920f' , '97bd097bd097c35b0b6fc920fb0722' , '9778397bd097c36b0b6fc9274c91aa' , '97b6b97bd19801ec9210c965cc920e' , '97bcf97c359801ec95f8c965cc920f' , '97bd097bd07f595b0b6fc920fb0722' , '9778397bd097c36b0b6fc9210c8dc2' , '9778397bd19801ec9210c9274c920e' , '97b6b97bd19801ec95f8c965cc920f' , '97bd07f5307f595b0b0bc920fb0722' , '7f0e397bd097c36b0b6fc9210c8dc2' , '9778397bd097c36c9210c9274c920e' , '97b6b97bd19801ec95f8c965cc920f' , '97bd07f5307f595b0b0bc920fb0722' , '7f0e397bd097c36b0b6fc9210c8dc2' , '9778397bd097c36c9210c9274c91aa' , '97b6b97bd19801ec9210c965cc920e' , '97bd07f1487f595b0b0bc920fb0722' , '7f0e397bd097c36b0b6fc9210c8dc2' , '9778397bd097c36b0b6fc9274c91aa' , '97b6b97bd19801ec9210c965cc920e' , '97bcf7f1487f595b0b0bb0b6fb0722' , '7f0e397bd097c35b0b6fc920fb0722' , '9778397bd097c36b0b6fc9274c91aa' , '97b6b97bd19801ec9210c965cc920e' , '97bcf7f1487f595b0b0bb0b6fb0722' , '7f0e397bd097c35b0b6fc920fb0722' , '9778397bd097c36b0b6fc9274c91aa' , '97b6b97bd19801ec9210c965cc920e' , '97bcf7f1487f531b0b0bb0b6fb0722' , '7f0e397bd097c35b0b6fc920fb0722' , '9778397bd097c36b0b6fc9274c91aa' , '97b6b97bd19801ec9210c965cc920e' , '97bcf7f1487f531b0b0bb0b6fb0722' , '7f0e397bd07f595b0b6fc920fb0722' , '9778397bd097c36b0b6fc9274c91aa' , '97b6b97bd19801ec9210c9274c920e' , '97bcf7f0e47f531b0b0bb0b6fb0722' , '7f0e397bd07f595b0b0bc920fb0722' , '9778397bd097c36b0b6fc9210c91aa' , '97b6b97bd197c36c9210c9274c920e' , '97bcf7f0e47f531b0b0bb0b6fb0722' , '7f0e397bd07f595b0b0bc920fb0722' , '9778397bd097c36b0b6fc9210c8dc2' , '9778397bd097c36c9210c9274c920e' , '97b6b7f0e47f531b0723b0b6fb0722' , '7f0e37f5307f595b0b0bc920fb0722' , '7f0e397bd097c36b0b6fc9210c8dc2' , '9778397bd097c36b0b70c9274c91aa' , '97b6b7f0e47f531b0723b0b6fb0721' , '7f0e37f1487f595b0b0bb0b6fb0722' , '7f0e397bd097c35b0b6fc9210c8dc2' , '9778397bd097c36b0b6fc9274c91aa' , '97b6b7f0e47f531b0723b0b6fb0721' , '7f0e27f1487f595b0b0bb0b6fb0722' , '7f0e397bd097c35b0b6fc920fb0722' , '9778397bd097c36b0b6fc9274c91aa' , '97b6b7f0e47f531b0723b0b6fb0721' , '7f0e27f1487f531b0b0bb0b6fb0722' , '7f0e397bd097c35b0b6fc920fb0722' , '9778397bd097c36b0b6fc9274c91aa' , '97b6b7f0e47f531b0723b0b6fb0721' , '7f0e27f1487f531b0b0bb0b6fb0722' , '7f0e397bd097c35b0b6fc920fb0722' , '9778397bd097c36b0b6fc9274c91aa' , '97b6b7f0e47f531b0723b0b6fb0721' , '7f0e27f1487f531b0b0bb0b6fb0722' , '7f0e397bd07f595b0b0bc920fb0722' , '9778397bd097c36b0b6fc9274c91aa' , '97b6b7f0e47f531b0723b0787b0721' , '7f0e27f0e47f531b0b0bb0b6fb0722' , '7f0e397bd07f595b0b0bc920fb0722' , '9778397bd097c36b0b6fc9210c91aa' , '97b6b7f0e47f149b0723b0787b0721' , '7f0e27f0e47f531b0723b0b6fb0722' , '7f0e397bd07f595b0b0bc920fb0722' , '9778397bd097c36b0b6fc9210c8dc2' , '977837f0e37f149b0723b0787b0721' , '7f07e7f0e47f531b0723b0b6fb0722' , '7f0e37f5307f595b0b0bc920fb0722' , '7f0e397bd097c35b0b6fc9210c8dc2' , '977837f0e37f14998082b0787b0721' , '7f07e7f0e47f531b0723b0b6fb0721' , '7f0e37f1487f595b0b0bb0b6fb0722' , '7f0e397bd097c35b0b6fc9210c8dc2' , '977837f0e37f14998082b0787b06bd' , '7f07e7f0e47f531b0723b0b6fb0721' , '7f0e27f1487f531b0b0bb0b6fb0722' , '7f0e397bd097c35b0b6fc920fb0722' , '977837f0e37f14998082b0787b06bd' , '7f07e7f0e47f531b0723b0b6fb0721' , '7f0e27f1487f531b0b0bb0b6fb0722' , '7f0e397bd097c35b0b6fc920fb0722' , '977837f0e37f14998082b0787b06bd' , '7f07e7f0e47f531b0723b0b6fb0721' , '7f0e27f1487f531b0b0bb0b6fb0722' , '7f0e397bd07f595b0b0bc920fb0722' , '977837f0e37f14998082b0787b06bd' , '7f07e7f0e47f531b0723b0b6fb0721' , '7f0e27f1487f531b0b0bb0b6fb0722' , '7f0e397bd07f595b0b0bc920fb0722' , '977837f0e37f14998082b0787b06bd' , '7f07e7f0e47f149b0723b0787b0721' , '7f0e27f0e47f531b0b0bb0b6fb0722' , '7f0e397bd07f595b0b0bc920fb0722' , '977837f0e37f14998082b0723b06bd' , '7f07e7f0e37f149b0723b0787b0721' , '7f0e27f0e47f531b0723b0b6fb0722' , '7f0e397bd07f595b0b0bc920fb0722' , '977837f0e37f14898082b0723b02d5' , '7ec967f0e37f14998082b0787b0721' , '7f07e7f0e47f531b0723b0b6fb0722' , '7f0e37f1487f595b0b0bb0b6fb0722' , '7f0e37f0e37f14898082b0723b02d5' , '7ec967f0e37f14998082b0787b0721' , '7f07e7f0e47f531b0723b0b6fb0722' , '7f0e37f1487f531b0b0bb0b6fb0722' , '7f0e37f0e37f14898082b0723b02d5' , '7ec967f0e37f14998082b0787b06bd' , '7f07e7f0e47f531b0723b0b6fb0721' , '7f0e37f1487f531b0b0bb0b6fb0722' , '7f0e37f0e37f14898082b072297c35' , '7ec967f0e37f14998082b0787b06bd' , '7f07e7f0e47f531b0723b0b6fb0721' , '7f0e27f1487f531b0b0bb0b6fb0722' , '7f0e37f0e37f14898082b072297c35' , '7ec967f0e37f14998082b0787b06bd' , '7f07e7f0e47f531b0723b0b6fb0721' , '7f0e27f1487f531b0b0bb0b6fb0722' , '7f0e37f0e366aa89801eb072297c35' , '7ec967f0e37f14998082b0787b06bd' , '7f07e7f0e47f149b0723b0787b0721' , '7f0e27f1487f531b0b0bb0b6fb0722' , '7f0e37f0e366aa89801eb072297c35' , '7ec967f0e37f14998082b0723b06bd' , '7f07e7f0e47f149b0723b0787b0721' , '7f0e27f0e47f531b0723b0b6fb0722' , '7f0e37f0e366aa89801eb072297c35' , '7ec967f0e37f14998082b0723b06bd' , '7f07e7f0e37f14998083b0787b0721' , '7f0e27f0e47f531b0723b0b6fb0722' , '7f0e37f0e366aa89801eb072297c35' , '7ec967f0e37f14898082b0723b02d5' , '7f07e7f0e37f14998082b0787b0721' , '7f07e7f0e47f531b0723b0b6fb0722' , '7f0e36665b66aa89801e9808297c35' , '665f67f0e37f14898082b0723b02d5' , '7ec967f0e37f14998082b0787b0721' , '7f07e7f0e47f531b0723b0b6fb0722' , '7f0e36665b66a449801e9808297c35' , '665f67f0e37f14898082b0723b02d5' , '7ec967f0e37f14998082b0787b06bd' , '7f07e7f0e47f531b0723b0b6fb0721' , '7f0e36665b66a449801e9808297c35' , '665f67f0e37f14898082b072297c35' , '7ec967f0e37f14998082b0787b06bd' , '7f07e7f0e47f531b0723b0b6fb0721' , '7f0e26665b66a449801e9808297c35' , '665f67f0e37f1489801eb072297c35' , '7ec967f0e37f14998082b0787b06bd' , '7f07e7f0e47f531b0723b0b6fb0721' , '7f0e27f1487f531b0b0bb0b6fb0722' ] , Array trans return nStr1 : [ '\u65e5' , '\u4e00' , '\u4e8c' , '\u4e09' , '\u56db' , '\u4e94' , '\u516d' , '\u4e03' , '\u516b' , '\u4e5d' , '\u5341' ] , Array trans return nStr2 : [ '\u521d' , '\u5341' , '\u5eff' , '\u5345' ] , Array trans return nStr3 : [ '\u6b63' , '\u4e8c' , '\u4e09' , '\u56db' , '\u4e94' , '\u516d' , '\u4e03' , '\u516b' , '\u4e5d' , '\u5341' , '\u51ac' , '\u814a' ] , param lunar return eg lYearDays : function ( y ) { let i , sum = 348 ; for ( i = 0x8000 ; i > 0x8 ; i >>= 1 ) { sum += this . lunarInfo [ y - 1900 ] & i ? 1 : 0 ; } return sum + this . leapDays ( y ) ; } , param lunar return eg leapMonth : function ( y ) { return this . lunarInfo [ y - 1900 ] & 0xf ; } , param lunar return eg leapDays : function ( y ) { if ( this . leapMonth ( y ) ) { return this . lunarInfo [ y - 1900 ] & 0x10000 ? 30 : 29 ; } return 0 ; } , param lunar return eg monthDays : function ( y , m ) { if ( m > 12 || m < 1 ) { return - 1 ; } return this . lunarInfo [ y - 1900 ] & ( 0x10000 >> m ) ? 30 : 29 ; } , param solar return eg solarDays : function ( y , m ) { if ( m > 12 || m < 1 ) { return - 1 ; } let ms = m - 1 ; if ( ms == 1 ) { return ( y % 4 == 0 && y % 100 != 0 ) || y % 400 == 0 ? 29 : 28 ; } else { return this . solarMonth [ ms ] ; } } , param lYear return toGanZhiYear : function ( lYear ) { let ganKey = ( lYear - 3 ) % 10 ; let zhiKey = ( lYear - 3 ) % 12 ; if ( ganKey == 0 ) ganKey = 10 ; if ( zhiKey == 0 ) zhiKey = 12 ; return this . Gan [ ganKey - 1 ] + this . Zhi [ zhiKey - 1 ] ; } , param cMonth param cDay return toAstro : function ( cMonth , cDay ) { let s = '\u9b54\u7faf\u6c34\u74f6\u53cc\u9c7c\u767d\u7f8a\u91d1\u725b\u53cc\u5b50\u5de8\u87f9\u72ee\u5b50\u5904\u5973\u5929\u79e4\u5929\u874e\u5c04\u624b\u9b54\u7faf' ; let arr = [ 20 , 19 , 21 , 21 , 21 , 22 , 23 , 23 , 23 , 23 , 22 , 22 ] ; return ( s . substr ( cMonth * 2 - ( cDay < arr [ cMonth - 1 ] ? 2 : 0 ) , 2 ) + '\u5ea7' ) ; } , param offset return toGanZhi : function ( offset ) { return this . Gan [ offset % 10 ] + this . Zhi [ offset % 12 ] ; } , param y公历年 return eg getTerm : function ( y , n ) { if ( y < 1900 || y > 2100 ) { return - 1 ; } if ( n < 1 || n > 24 ) { return - 1 ; } let _table = this . sTermInfo [ y - 1900 ] ; let _info = [ parseInt ( '0x' + _table . substr ( 0 , 5 ) ) . toString ( ) , parseInt ( '0x' + _table . substr ( 5 , 5 ) ) . toString ( ) , parseInt ( '0x' + _table . substr ( 10 , 5 ) ) . toString ( ) , parseInt ( '0x' + _table . substr ( 15 , 5 ) ) . toString ( ) , parseInt ( '0x' + _table . substr ( 20 , 5 ) ) . toString ( ) , parseInt ( '0x' + _table . substr ( 25 , 5 ) ) . toString ( ) ] ; let _calday = [ _info [ 0 ] . substr ( 0 , 1 ) , _info [ 0 ] . substr ( 1 , 2 ) , _info [ 0 ] . substr ( 3 , 1 ) , _info [ 0 ] . substr ( 4 , 2 ) , _info [ 1 ] . substr ( 0 , 1 ) , _info [ 1 ] . substr ( 1 , 2 ) , _info [ 1 ] . substr ( 3 , 1 ) , _info [ 1 ] . substr ( 4 , 2 ) , _info [ 2 ] . substr ( 0 , 1 ) , _info [ 2 ] . substr ( 1 , 2 ) , _info [ 2 ] . substr ( 3 , 1 ) , _info [ 2 ] . substr ( 4 , 2 ) , _info [ 3 ] . substr ( 0 , 1 ) , _info [ 3 ] . substr ( 1 , 2 ) , _info [ 3 ] . substr ( 3 , 1 ) , _info [ 3 ] . substr ( 4 , 2 ) , _info [ 4 ] . substr ( 0 , 1 ) , _info [ 4 ] . substr ( 1 , 2 ) , _info [ 4 ] . substr ( 3 , 1 ) , _info [ 4 ] . substr ( 4 , 2 ) , _info [ 5 ] . substr ( 0 , 1 ) , _info [ 5 ] . substr ( 1 , 2 ) , _info [ 5 ] . substr ( 3 , 1 ) , _info [ 5 ] . substr ( 4 , 2 ) ] ; return parseInt ( _calday [ n - 1 ] ) ; } , param lunar return eg toChinaMonth : function ( m ) { if ( m > 12 || m < 1 ) { return - 1 ; } let s = this . nStr3 [ m - 1 ] ; s += '\u6708' ; return s ; } , param lunar return eg toChinaDay : function ( d ) { let s ; switch ( d ) { case 10 : s = '\u521d\u5341' ; break ; case 20 : s = '\u4e8c\u5341' ; break ; break ; case 30 : s = '\u4e09\u5341' ; break ; break ; default : s = this . nStr2 [ Math . floor ( d / 10 ) ] ; s += this . nStr1 [ d % 10 ] ; } return s ; } , param y return eg getAnimal : function ( y ) { return this . Animals [ ( y - 4 ) % 12 ] ; } , param date return eg solar2lunar : function ( date ) : LunarInfo { const dateObj = new Date ( date ) ; let y = dateObj . getFullYear ( ) , m = dateObj . getMonth ( ) + 1 , d = dateObj . getDate ( ) ; let objDate ; if ( ! y ) { objDate = new Date ( ) ; } else { objDate = new Date ( y , parseInt ( m ) - 1 , d ) ; } let i , leap = 0 , temp = 0 ; y = objDate . getFullYear ( ) ; m = objDate . getMonth ( ) + 1 ; d = objDate . getDate ( ) ; let offset = ( Date . UTC ( objDate . getFullYear ( ) , objDate . getMonth ( ) , objDate . getDate ( ) ) - Date . UTC ( 1900 , 0 , 31 ) ) / 86400000 ; for ( i = 1900 ; i < 2101 && offset > 0 ; i ++ ) { temp = this . lYearDays ( i ) ; offset -= temp ; } if ( offset < 0 ) { offset += temp ; i -- ; } let isTodayObj = new Date ( ) , isToday = false ; if ( isTodayObj . getFullYear ( ) == y && isTodayObj . getMonth ( ) + 1 == m && isTodayObj . getDate ( ) == d ) { isToday = true ; } let nWeek = objDate . getDay ( ) , cWeek = this . nStr1 [ nWeek ] ; if ( nWeek == 0 ) { nWeek = 7 ; } let year = i ; leap = this . leapMonth ( i ) ; let isLeap = false ; for ( i = 1 ; i < 13 && offset > 0 ; i ++ ) { if ( leap > 0 && i == leap + 1 && isLeap == false ) { -- i ; isLeap = true ; temp = this . leapDays ( year ) ; } else { temp = this . monthDays ( year , i ) ; } if ( isLeap == true && i == leap + 1 ) { isLeap = false ; } offset -= temp ; } if ( offset == 0 && leap > 0 && i == leap + 1 ) { if ( isLeap ) { isLeap = false ; } else { isLeap = true ; -- i ; } } if ( offset < 0 ) { offset += temp ; -- i ; } let month = i ; let day = offset + 1 ; let sm = m - 1 ; let gzY = this . toGanZhiYear ( year ) ; let firstNode = this . getTerm ( y , m * 2 - 1 ) ; let secondNode = this . getTerm ( y , m * 2 ) ; let gzM = this . toGanZhi ( ( y - 1900 ) * 12 + m + 11 ) ; if ( d >= firstNode ) { gzM = this . toGanZhi ( ( y - 1900 ) * 12 + m + 12 ) ; } let isTerm = false ; let Term = null ; if ( firstNode == d ) { isTerm = true ; Term = this . solarTerm [ m * 2 - 2 ] ; } if ( secondNode == d ) { isTerm = true ; Term = this . solarTerm [ m * 2 - 1 ] ; } let dayCyclical = Date . UTC ( y , sm , 1 , 0 , 0 , 0 , 0 ) / 86400000 + 25567 + 10 ; let gzD = this . toGanZhi ( dayCyclical + d - 1 ) ; let astro = this . toAstro ( m , d ) ; return { lYear : year , lMonth : month , lDay : day , Animal : this . getAnimal ( year ) , IMonthCn : ( isLeap ? '\u95f0' : '' ) + this . toChinaMonth ( month ) , IDayCn : this . toChinaDay ( day ) , cYear : y , cMonth : m , cDay : d , gzYear : gzY , gzMonth : gzM , gzDay : gzD , isToday : isToday , isLeap : isLeap , nWeek : nWeek , ncWeek : '\u661f\u671f' + cWeek , isTerm : isTerm , Term : Term , astro : astro } ; } , param y param m param d param isLeapMonth return eg lunar2solar : function ( y , m , d , isLeapMonth ) : LunarInfo | - 1 { isLeapMonth = ! ! isLeapMonth ; let leapOffset = 0 ; let leapMonth = this . leapMonth ( y ) ; let leapDay = this . leapDays ( y ) ; let day = this . monthDays ( y , m ) ; let _day = day ; if ( isLeapMonth ) { _day = this . leapDays ( y , m ) ; } if ( y < 1900 || y > 2100 || d > _day ) { return - 1 ; } let offset = 0 ; for ( let i = 1900 ; i < y ; i ++ ) { offset += this . lYearDays ( i ) ; } let leap = 0 , isAdd = false ; for ( let i = 1 ; i < m ; i ++ ) { leap = this . leapMonth ( y ) ; if ( ! isAdd ) { if ( leap <= i && leap > 0 ) { offset += this . leapDays ( y ) ; isAdd = true ; } } offset += this . monthDays ( y , i ) ; } if ( isLeapMonth ) { offset += day ; } let stmap = Date . UTC ( 1900 , 1 , 30 , 0 , 0 , 0 ) ; let calObj = new Date ( ( offset + d - 31 ) * 86400000 + stmap ) ; let cY = calObj . getUTCFullYear ( ) ; let cM = calObj . getUTCMonth ( ) + 1 ; let cD = calObj . getUTCDate ( ) ; return this . solar2lunar ( cY , cM , cD ) ; } } ;