@ -6,7 +6,7 @@
@@ -6,7 +6,7 @@
* /
/* 公历年月日转农历数据 返回json */
// calendar.solar2lunar(1987,11,01);
/** 农历年月日转公历年月日 ** /
/** 农历年月日转公历年月日 */
// calendar.lunar2solar(1987,9,10);
// 调用以上方法后返回类似如下object(json)具体以上就不需要解释了吧!
// c开头的是公历各属性值 l开头的自然就是农历咯 gz开头的就是天干地支纪年的数据啦~
@ -39,208 +39,208 @@ const calendar = {
@@ -39,208 +39,208 @@ const calendar = {
* @ return Hex
* /
lunarInfo : [
0x04bd 8 ,
0x04ae 0 ,
0x0a 570 ,
0x054d 5 ,
0x0d 260 ,
0x0d 950 ,
0x04BD 8 ,
0x04AE 0 ,
0x0A 570 ,
0x054D 5 ,
0x0D 260 ,
0x0D 950 ,
0x16554 ,
0x056a 0 ,
0x09ad 0 ,
0x055d 2 , // 1900-1909
0x04ae 0 ,
0x0a5b 6 ,
0x0a4d 0 ,
0x0d 250 ,
0x1d 255 ,
0x0b 540 ,
0x0d6a 0 ,
0x0ada 2 ,
0x095b 0 ,
0x056A 0 ,
0x09AD 0 ,
0x055D 2 , // 1900-1909
0x04AE 0 ,
0x0A5B 6 ,
0x0A4D 0 ,
0x0D 250 ,
0x1D 255 ,
0x0B 540 ,
0x0D6A 0 ,
0x0ADA 2 ,
0x095B 0 ,
0x14977 , // 1910-1919
0x04970 ,
0x0a4b 0 ,
0x0b4b 5 ,
0x06a 50 ,
0x06d 40 ,
0x1ab 54 ,
0x02b 60 ,
0x0A4B 0 ,
0x0B4B 5 ,
0x06A 50 ,
0x06D 40 ,
0x1AB 54 ,
0x02B 60 ,
0x09570 ,
0x052f 2 ,
0x052F 2 ,
0x04970 , // 1920-1929
0x06566 ,
0x0d4a 0 ,
0x0ea 50 ,
0x06e 95 ,
0x05ad 0 ,
0x02b 60 ,
0x186e 3 ,
0x092e 0 ,
0x1c8d 7 ,
0x0c 950 , // 1930-1939
0x0d4a 0 ,
0x1d8a 6 ,
0x0b 550 ,
0x056a 0 ,
0x1a5b 4 ,
0x025d 0 ,
0x092d 0 ,
0x0d2b 2 ,
0x0a 950 ,
0x0b 557 , // 1940-1949
0x06ca 0 ,
0x0b 550 ,
0x0D4A 0 ,
0x0EA 50 ,
0x06E 95 ,
0x05AD 0 ,
0x02B 60 ,
0x186E 3 ,
0x092E 0 ,
0x1C8D 7 ,
0x0C 950 , // 1930-1939
0x0D4A 0 ,
0x1D8A 6 ,
0x0B 550 ,
0x056A 0 ,
0x1A5B 4 ,
0x025D 0 ,
0x092D 0 ,
0x0D2B 2 ,
0x0A 950 ,
0x0B 557 , // 1940-1949
0x06CA 0 ,
0x0B 550 ,
0x15355 ,
0x04da 0 ,
0x0a5b 0 ,
0x04DA 0 ,
0x0A5B 0 ,
0x14573 ,
0x052b 0 ,
0x0a9a 8 ,
0x0e 950 ,
0x06aa 0 , // 1950-1959
0x0aea 6 ,
0x0ab 50 ,
0x04b 60 ,
0x0aae 4 ,
0x0a 570 ,
0x052B 0 ,
0x0A9A 8 ,
0x0E 950 ,
0x06AA 0 , // 1950-1959
0x0AEA 6 ,
0x0AB 50 ,
0x04B 60 ,
0x0AAE 4 ,
0x0A 570 ,
0x05260 ,
0x0f 263 ,
0x0d 950 ,
0x05b 57 ,
0x056a 0 , // 1960-1969
0x096d 0 ,
0x04dd 5 ,
0x04ad 0 ,
0x0a4d 0 ,
0x0d4d 4 ,
0x0d 250 ,
0x0d 558 ,
0x0b 540 ,
0x0b6a 0 ,
0x195a 6 , // 1970-1979
0x095b 0 ,
0x049b 0 ,
0x0a 974 ,
0x0a4b 0 ,
0x0b27a ,
0x06a 50 ,
0x06d 40 ,
0x0af 46 ,
0x0ab 60 ,
0x0F 263 ,
0x0D 950 ,
0x05B 57 ,
0x056A 0 , // 1960-1969
0x096D 0 ,
0x04DD 5 ,
0x04AD 0 ,
0x0A4D 0 ,
0x0D4D 4 ,
0x0D 250 ,
0x0D 558 ,
0x0B 540 ,
0x0B6A 0 ,
0x195A 6 , // 1970-1979
0x095B 0 ,
0x049B 0 ,
0x0A 974 ,
0x0A4B 0 ,
0x0B27A ,
0x06A 50 ,
0x06D 40 ,
0x0AF 46 ,
0x0AB 60 ,
0x09570 , // 1980-1989
0x04af 5 ,
0x04AF 5 ,
0x04970 ,
0x064b 0 ,
0x074a 3 ,
0x0ea 50 ,
0x06b 58 ,
0x055c 0 ,
0x0ab 60 ,
0x096d 5 ,
0x092e 0 , // 1990-1999
0x0c 960 ,
0x0d 954 ,
0x0d4a 0 ,
0x0da 50 ,
0x064B 0 ,
0x074A 3 ,
0x0EA 50 ,
0x06B 58 ,
0x055C 0 ,
0x0AB 60 ,
0x096D 5 ,
0x092E 0 , // 1990-1999
0x0C 960 ,
0x0D 954 ,
0x0D4A 0 ,
0x0DA 50 ,
0x07552 ,
0x056a 0 ,
0x0abb 7 ,
0x025d 0 ,
0x092d 0 ,
0x0cab 5 , // 2000-2009
0x0a 950 ,
0x0b4a 0 ,
0x0baa 4 ,
0x0ad 50 ,
0x055d 9 ,
0x04ba 0 ,
0x0a5b 0 ,
0x056A 0 ,
0x0ABB 7 ,
0x025D 0 ,
0x092D 0 ,
0x0CAB 5 , // 2000-2009
0x0A 950 ,
0x0B4A 0 ,
0x0BAA 4 ,
0x0AD 50 ,
0x055D 9 ,
0x04BA 0 ,
0x0A5B 0 ,
0x15176 ,
0x052b 0 ,
0x0a 930 , // 2010-2019
0x052B 0 ,
0x0A 930 , // 2010-2019
0x07954 ,
0x06aa 0 ,
0x0ad 50 ,
0x05b 52 ,
0x04b 60 ,
0x0a6e 6 ,
0x0a4e 0 ,
0x0d 260 ,
0x0ea 65 ,
0x0d 530 , // 2020-2029
0x05aa 0 ,
0x076a 3 ,
0x096d 0 ,
0x04afb ,
0x04ad 0 ,
0x0a4d 0 ,
0x1d0b 6 ,
0x0d 250 ,
0x0d 520 ,
0x0dd 45 , // 2030-2039
0x0b5a 0 ,
0x056d 0 ,
0x055b 2 ,
0x049b 0 ,
0x0a 577 ,
0x0a4b 0 ,
0x0aa 50 ,
0x1b 255 ,
0x06d 20 ,
0x0ada 0 , // 2040-2049
/** Add By JJonline@JJonline.Cn ** /
0x14b 63 ,
0x06AA 0 ,
0x0AD 50 ,
0x05B 52 ,
0x04B 60 ,
0x0A6E 6 ,
0x0A4E 0 ,
0x0D 260 ,
0x0EA 65 ,
0x0D 530 , // 2020-2029
0x05AA 0 ,
0x076A 3 ,
0x096D 0 ,
0x04AFB ,
0x04AD 0 ,
0x0A4D 0 ,
0x1D0B 6 ,
0x0D 250 ,
0x0D 520 ,
0x0DD 45 , // 2030-2039
0x0B5A 0 ,
0x056D 0 ,
0x055B 2 ,
0x049B 0 ,
0x0A 577 ,
0x0A4B 0 ,
0x0AA 50 ,
0x1B 255 ,
0x06D 20 ,
0x0ADA 0 , // 2040-2049
/** Add By JJonline@JJonline.Cn */
0x14B 63 ,
0x09370 ,
0x049f 8 ,
0x049F 8 ,
0x04970 ,
0x064b 0 ,
0x168a 6 ,
0x0ea 50 ,
0x06b 20 ,
0x1a6c 4 ,
0x0aae 0 , // 2050-2059
0x0a2e 0 ,
0x0d2e 3 ,
0x0c 960 ,
0x0d 557 ,
0x0d4a 0 ,
0x0da 50 ,
0x05d 55 ,
0x056a 0 ,
0x0a6d 0 ,
0x055d 4 , // 2060-2069
0x052d 0 ,
0x0a9b 8 ,
0x0a 950 ,
0x0b4a 0 ,
0x0b6a 6 ,
0x0ad 50 ,
0x055a 0 ,
0x0aba 4 ,
0x0a5b 0 ,
0x052b 0 , // 2070-2079
0x0b 273 ,
0x064B 0 ,
0x168A 6 ,
0x0EA 50 ,
0x06B 20 ,
0x1A6C 4 ,
0x0AAE 0 , // 2050-2059
0x0A2E 0 ,
0x0D2E 3 ,
0x0C 960 ,
0x0D 557 ,
0x0D4A 0 ,
0x0DA 50 ,
0x05D 55 ,
0x056A 0 ,
0x0A6D 0 ,
0x055D 4 , // 2060-2069
0x052D 0 ,
0x0A9B 8 ,
0x0A 950 ,
0x0B4A 0 ,
0x0B6A 6 ,
0x0AD 50 ,
0x055A 0 ,
0x0ABA 4 ,
0x0A5B 0 ,
0x052B 0 , // 2070-2079
0x0B 273 ,
0x06930 ,
0x07337 ,
0x06aa 0 ,
0x0ad 50 ,
0x14b 55 ,
0x04b 60 ,
0x0a 570 ,
0x054e 4 ,
0x0d 160 , // 2080-2089
0x0e 968 ,
0x0d 520 ,
0x0daa 0 ,
0x16aa 6 ,
0x056d 0 ,
0x04ae 0 ,
0x0a9d 4 ,
0x0a2d 0 ,
0x0d 150 ,
0x0f 252 , // 2090-2099
0x0d520
0x06AA 0 ,
0x0AD 50 ,
0x14B 55 ,
0x04B 60 ,
0x0A 570 ,
0x054E 4 ,
0x0D 160 , // 2080-2089
0x0E 968 ,
0x0D 520 ,
0x0DAA 0 ,
0x16AA 6 ,
0x056D 0 ,
0x04AE 0 ,
0x0A9D 4 ,
0x0A2D 0 ,
0x0D 150 ,
0x0F 252 , // 2090-2099
0x0D520 ,
] , // 2100
/ * *
@ -257,15 +257,15 @@ const calendar = {
@@ -257,15 +257,15 @@ const calendar = {
* /
Gan : [
'\u7532' ,
'\u4e 59' ,
'\u4e 19' ,
'\u4e 01' ,
'\u620a ' ,
'\u5df 1' ,
'\u5e9a ' ,
'\u8f9b ' ,
'\u58ec ' ,
'\u7678'
'\u4E 59' ,
'\u4E 19' ,
'\u4E 01' ,
'\u620A ' ,
'\u5DF 1' ,
'\u5E9A ' ,
'\u8F9B ' ,
'\u58EC ' ,
'\u7678' ,
] ,
/ * *
@ -275,18 +275,18 @@ const calendar = {
@@ -275,18 +275,18 @@ const calendar = {
* @ return Cn string
* /
Zhi : [
'\u5b 50' ,
'\u4e 11' ,
'\u5bc 5' ,
'\u536f ' ,
'\u8fb 0' ,
'\u5df 3' ,
'\u5B 50' ,
'\u4E 11' ,
'\u5BC 5' ,
'\u536F ' ,
'\u8FB 0' ,
'\u5DF 3' ,
'\u5348' ,
'\u672a ' ,
'\u672A ' ,
'\u7533' ,
'\u9149' ,
'\u620c ' ,
'\u4ea5'
'\u620C ' ,
'\u4EA5' ,
] ,
/ * *
@ -296,18 +296,18 @@ const calendar = {
@@ -296,18 +296,18 @@ const calendar = {
* @ return Cn string
* /
Animals : [
'\u9f 20' ,
'\u725b ' ,
'\u864e ' ,
'\u9F 20' ,
'\u725B ' ,
'\u864E ' ,
'\u5154' ,
'\u9f 99' ,
'\u86c 7' ,
'\u9a6c ' ,
'\u7f8a ' ,
'\u9F 99' ,
'\u86C 7' ,
'\u9A6C ' ,
'\u7F8A ' ,
'\u7334' ,
'\u9e 21' ,
'\u72d 7' ,
'\u732a'
'\u9E 21' ,
'\u72D 7' ,
'\u732A' ,
] ,
/ * *
@ -317,30 +317,30 @@ const calendar = {
@@ -317,30 +317,30 @@ const calendar = {
* @ return Cn string
* /
solarTerm : [
'\u5c0f\u5bd 2' ,
'\u5927\u5bd 2' ,
'\u7acb \u6625' ,
'\u96e8\u6c 34' ,
'\u60ca\u86f 0' ,
'\u5C0F\u5BD 2' ,
'\u5927\u5BD 2' ,
'\u7ACB \u6625' ,
'\u96E8\u6C 34' ,
'\u60CA\u86F 0' ,
'\u6625\u5206' ,
'\u6e05\u660e ' ,
'\u8c37\u96e 8' ,
'\u7acb\u590f ' ,
'\u5c0f\u6ee 1' ,
'\u8292\u79cd ' ,
'\u590f\u81f 3' ,
'\u5c0f \u6691' ,
'\u6E05\u660E ' ,
'\u8C37\u96E 8' ,
'\u7ACB\u590F ' ,
'\u5C0F\u6EE 1' ,
'\u8292\u79CD ' ,
'\u590F\u81F 3' ,
'\u5C0F \u6691' ,
'\u5927\u6691' ,
'\u7acb\u79cb ' ,
'\u7ACB\u79CB ' ,
'\u5904\u6691' ,
'\u767d \u9732' ,
'\u79cb \u5206' ,
'\u5bd 2\u9732' ,
'\u971c\u964d ' ,
'\u7acb\u51ac ' ,
'\u5c0f\u96ea ' ,
'\u5927\u96ea ' ,
'\u51ac\u81f3'
'\u767D \u9732' ,
'\u79CB \u5206' ,
'\u5BD 2\u9732' ,
'\u971C\u964D ' ,
'\u7ACB\u51AC ' ,
'\u5C0F\u96EA ' ,
'\u5927\u96EA ' ,
'\u51AC\u81F3' ,
] ,
/ * *
@ -549,7 +549,7 @@ const calendar = {
@@ -549,7 +549,7 @@ const calendar = {
'665f67f0e37f1489801eb072297c35' ,
'7ec967f0e37f14998082b0787b06bd' ,
'7f07e7f0e47f531b0723b0b6fb0721' ,
'7f0e27f1487f531b0b0bb0b6fb0722'
'7f0e27f1487f531b0b0bb0b6fb0722' ,
] ,
/ * *
@ -559,17 +559,17 @@ const calendar = {
@@ -559,17 +559,17 @@ const calendar = {
* @ return Cn string
* /
nStr1 : [
'\u65e 5' ,
'\u4e 00' ,
'\u4e8c ' ,
'\u4e 09' ,
'\u56db ' ,
'\u4e 94' ,
'\u516d ' ,
'\u4e 03' ,
'\u516b ' ,
'\u4e5d ' ,
'\u5341'
'\u65E 5' ,
'\u4E 00' ,
'\u4E8C ' ,
'\u4E 09' ,
'\u56DB ' ,
'\u4E 94' ,
'\u516D ' ,
'\u4E 03' ,
'\u516B ' ,
'\u4E5D ' ,
'\u5341' ,
] ,
/ * *
@ -578,7 +578,7 @@ const calendar = {
@@ -578,7 +578,7 @@ const calendar = {
* @ trans [ '初' , '十' , '廿' , '卅' ]
* @ return Cn string
* /
nStr2 : [ '\u521d ' , '\u5341' , '\u5eff ' , '\u5345' ] ,
nStr2 : [ '\u521D ' , '\u5341' , '\u5EFF ' , '\u5345' ] ,
/ * *
* 月份转农历称呼速查表
@ -587,18 +587,18 @@ const calendar = {
@@ -587,18 +587,18 @@ const calendar = {
* @ return Cn string
* /
nStr3 : [
'\u6b 63' ,
'\u4e8c ' ,
'\u4e 09' ,
'\u56db ' ,
'\u4e 94' ,
'\u516d ' ,
'\u4e 03' ,
'\u516b ' ,
'\u4e5d ' ,
'\u6B 63' ,
'\u4E8C ' ,
'\u4E 09' ,
'\u56DB ' ,
'\u4E 94' ,
'\u516D ' ,
'\u4E 03' ,
'\u516B ' ,
'\u4E5D ' ,
'\u5341' ,
'\u51ac ' ,
'\u814a'
'\u51AC ' ,
'\u814A' ,
] ,
/ * *
@ -607,7 +607,7 @@ const calendar = {
@@ -607,7 +607,7 @@ const calendar = {
* @ return Number
* @ eg : var count = calendar . lYearDays ( 1987 ) ; //count=387
* /
lYearDays : function ( y ) {
lYearDays ( y ) {
let i
let sum = 348
for ( i = 0x8000 ; i > 0x8 ; i >>= 1 ) {
@ -622,9 +622,9 @@ const calendar = {
@@ -622,9 +622,9 @@ const calendar = {
* @ return Number ( 0 - 12 )
* @ eg : var leapMonth = calendar . leapMonth ( 1987 ) ; //leapMonth=6
* /
leapMonth : function ( y ) {
leapMonth ( y ) {
// 闰字编码 \u95f0
return calendar . lunarInfo [ y - 1900 ] & 0xf
return calendar . lunarInfo [ y - 1900 ] & 0xF
} ,
/ * *
@ -633,7 +633,7 @@ const calendar = {
@@ -633,7 +633,7 @@ const calendar = {
* @ return Number ( 0 、 29 、 30 )
* @ eg : var leapMonthDay = calendar . leapDays ( 1987 ) ; //leapMonthDay=29
* /
leapDays : function ( y ) {
leapDays ( y ) {
if ( calendar . leapMonth ( y ) ) {
return calendar . lunarInfo [ y - 1900 ] & 0x10000 ? 30 : 29
}
@ -646,8 +646,9 @@ const calendar = {
@@ -646,8 +646,9 @@ const calendar = {
* @ return Number ( - 1 、 29 、 30 )
* @ eg : var MonthDay = calendar . monthDays ( 1987 , 9 ) ; //MonthDay=29
* /
monthDays : function ( y , m ) {
if ( m > 12 || m < 1 ) return - 1 // 月份参数从1至12,参数错误返回-1
monthDays ( y , m ) {
if ( m > 12 || m < 1 )
return - 1 // 月份参数从1至12,参数错误返回-1
return calendar . lunarInfo [ y - 1900 ] & ( 0x10000 >> m ) ? 30 : 29
} ,
@ -657,13 +658,15 @@ const calendar = {
@@ -657,13 +658,15 @@ const calendar = {
* @ return Number ( - 1 、 28 、 29 、 30 、 31 )
* @ eg : var solarMonthDay = calendar . leapDays ( 1987 ) ; //solarMonthDay=30
* /
solarDays : function ( y , m ) {
if ( m > 12 || m < 1 ) return - 1 // 若参数错误 返回-1
solarDays ( y , m ) {
if ( m > 12 || m < 1 )
return - 1 // 若参数错误 返回-1
const ms = m - 1
if ( + ms === 1 ) {
// 2月份的闰平规律测算后确认返回28或29
return ( y % 4 === 0 && y % 100 !== 0 ) || y % 400 === 0 ? 29 : 28
} else {
}
else {
return calendar . solarMonth [ ms ]
}
} ,
@ -673,11 +676,13 @@ const calendar = {
@@ -673,11 +676,13 @@ const calendar = {
* @ param lYear 农历年的年份数
* @ return Cn string
* /
toGanZhiYear : function ( lYear ) {
toGanZhiYear ( lYear ) {
let ganKey = ( lYear - 3 ) % 10
let zhiKey = ( lYear - 3 ) % 12
if ( + ganKey === 0 ) ganKey = 10 // 如果余数为0则为最后一个天干
if ( + zhiKey === 0 ) zhiKey = 12 // 如果余数为0则为最后一个地支
if ( + ganKey === 0 )
ganKey = 10 // 如果余数为0则为最后一个天干
if ( + zhiKey === 0 )
zhiKey = 12 // 如果余数为0则为最后一个地支
return calendar . Gan [ ganKey - 1 ] + calendar . Zhi [ zhiKey - 1 ]
} ,
@ -687,11 +692,11 @@ const calendar = {
@@ -687,11 +692,11 @@ const calendar = {
* @ param cDay [ description ]
* @ return Cn string
* /
toAstro : function ( cMonth , cDay ) {
const 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 '
toAstro ( cMonth , cDay ) {
const 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 '
const 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' // 座
return ` ${ s . substr ( cMonth * 2 - ( cDay < arr [ cMonth - 1 ] ? 2 : 0 ) , 2 ) } \u 5EA7 ` // 座
} ,
/ * *
@ -699,7 +704,7 @@ const calendar = {
@@ -699,7 +704,7 @@ const calendar = {
* @ param offset 相对甲子的偏移量
* @ return Cn string
* /
toGanZhi : function ( offset ) {
toGanZhi ( offset ) {
return calendar . Gan [ offset % 10 ] + calendar . Zhi [ offset % 12 ]
} ,
@ -709,17 +714,19 @@ const calendar = {
@@ -709,17 +714,19 @@ const calendar = {
* @ return day Number
* @ eg : var _24 = calendar . getTerm ( 1987 , 3 ) ; //_24=4;意即1987年2月4日立春
* /
getTerm : function ( y , n ) {
if ( y < 1900 || y > 2100 ) return - 1
if ( n < 1 || n > 24 ) return - 1
getTerm ( y , n ) {
if ( y < 1900 || y > 2100 )
return - 1
if ( n < 1 || n > 24 )
return - 1
const _table = calendar . sTermInfo [ y - 1900 ]
const _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 ( )
Number . parseInt ( ` 0x ${ _table . substr ( 0 , 5 ) } ` ) . toString ( ) ,
Number . parseInt ( ` 0x ${ _table . substr ( 5 , 5 ) } ` ) . toString ( ) ,
Number . parseInt ( ` 0x ${ _table . substr ( 10 , 5 ) } ` ) . toString ( ) ,
Number . parseInt ( ` 0x ${ _table . substr ( 15 , 5 ) } ` ) . toString ( ) ,
Number . parseInt ( ` 0x ${ _table . substr ( 20 , 5 ) } ` ) . toString ( ) ,
Number . parseInt ( ` 0x ${ _table . substr ( 25 , 5 ) } ` ) . toString ( ) ,
]
const _calday = [
_info [ 0 ] . substr ( 0 , 1 ) ,
@ -750,9 +757,9 @@ const calendar = {
@@ -750,9 +757,9 @@ const calendar = {
_info [ 5 ] . substr ( 0 , 1 ) ,
_info [ 5 ] . substr ( 1 , 2 ) ,
_info [ 5 ] . substr ( 3 , 1 ) ,
_info [ 5 ] . substr ( 4 , 2 )
_info [ 5 ] . substr ( 4 , 2 ) ,
]
return parseInt ( _calday [ n - 1 ] )
return Number . parseInt ( _calday [ n - 1 ] )
} ,
/ * *
@ -761,9 +768,10 @@ const calendar = {
@@ -761,9 +768,10 @@ const calendar = {
* @ return Cn string
* @ eg : var cnMonth = calendar . toChinaMonth ( 12 ) ; //cnMonth='腊月'
* /
toChinaMonth : function ( m ) {
toChinaMonth ( m ) {
// 月 => \u6708
if ( m > 12 || m < 1 ) return - 1 // 若参数错误 返回-1
if ( m > 12 || m < 1 )
return - 1 // 若参数错误 返回-1
let s = calendar . nStr3 [ m - 1 ]
s += '\u6708' // 加上月字
return s
@ -775,18 +783,18 @@ const calendar = {
@@ -775,18 +783,18 @@ const calendar = {
* @ return Cn string
* @ eg : var cnDay = calendar . toChinaDay ( 21 ) ; //cnMonth='廿一'
* /
toChinaDay : function ( d ) {
toChinaDay ( d ) {
// 日 => \u65e5
let s
switch ( d ) {
case 10 :
s = '\u521d \u5341'
s = '\u521D \u5341'
break
case 20 :
s = '\u4e8c \u5341'
s = '\u4E8C \u5341'
break
case 30 :
s = '\u4e 09\u5341'
s = '\u4E 09\u5341'
break
default :
s = calendar . nStr2 [ Math . floor ( d / 10 ) ]
@ -801,7 +809,7 @@ const calendar = {
@@ -801,7 +809,7 @@ const calendar = {
* @ return Cn string
* @ eg : var animal = calendar . getAnimal ( 1987 ) ; //animal='兔'
* /
getAnimal : function ( y ) {
getAnimal ( y ) {
return calendar . Animals [ ( y - 4 ) % 12 ]
} ,
@ -813,7 +821,7 @@ const calendar = {
@@ -813,7 +821,7 @@ const calendar = {
* @ return JSON object
* @ eg : console . log ( calendar . solar2lunar ( 1987 , 11 , 01 ) ) ;
* /
solar2lunar : function ( y , m , d ) {
solar2lunar ( y , m , d ) {
// 参数区间1900.1.31~2100.12.31
// 年份限定、上限
if ( y < 1900 || y > 2100 ) {
@ -827,8 +835,9 @@ const calendar = {
@@ -827,8 +835,9 @@ const calendar = {
let objDate
if ( ! y ) {
objDate = new Date ( )
} else {
objDate = new Date ( y , parseInt ( m ) - 1 , d )
}
else {
objDate = new Date ( y , Number . parseInt ( m ) - 1 , d )
}
let i
let leap = 0
@ -837,10 +846,10 @@ const calendar = {
@@ -837,10 +846,10 @@ const calendar = {
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 ) ) /
8640000 0
let offset
= ( Date . UTC ( objDate . getFullYear ( ) , objDate . getMonth ( ) , objDate . getDate ( ) )
- Date . UTC ( 1900 , 0 , 31 ) )
/ 8 6 4 0 0 0 0 0
for ( i = 1900 ; i < 2101 && offset > 0 ; i ++ ) {
temp = calendar . lYearDays ( i )
offset -= temp
@ -854,9 +863,9 @@ const calendar = {
@@ -854,9 +863,9 @@ const calendar = {
const isTodayObj = new Date ( )
let isToday = false
if (
isTodayObj . getFullYear ( ) === + y &&
isTodayObj . getMonth ( ) + 1 === + m &&
isTodayObj . getDate ( ) === + d
isTodayObj . getFullYear ( ) === + y
&& isTodayObj . getMonth ( ) + 1 === + m
&& isTodayObj . getDate ( ) === + d
) {
isToday = true
}
@ -879,18 +888,21 @@ const calendar = {
@@ -879,18 +888,21 @@ const calendar = {
-- i
isLeap = true
temp = calendar . leapDays ( year ) // 计算农历闰月天数
} else {
}
else {
temp = calendar . monthDays ( year , i ) // 计算农历普通月天数
}
// 解除闰月
if ( isLeap === true && i === leap + 1 ) isLeap = false
if ( isLeap === true && i === leap + 1 )
isLeap = false
offset -= temp
}
// 闰月导致数组下标重叠取反
if ( offset === 0 && leap > 0 && i === leap + 1 ) {
if ( isLeap ) {
isLeap = false
} else {
}
else {
isLeap = true
-- i
}
@ -940,7 +952,7 @@ const calendar = {
@@ -940,7 +952,7 @@ const calendar = {
lMonth : month ,
lDay : day ,
Animal : calendar . getAnimal ( year ) ,
IMonthCn : ( isLeap ? '\u95f 0' : '' ) + calendar . toChinaMonth ( month ) ,
IMonthCn : ( isLeap ? '\u95F 0' : '' ) + calendar . toChinaMonth ( month ) ,
IDayCn : calendar . toChinaDay ( day ) ,
cYear : y ,
cMonth : m ,
@ -948,13 +960,13 @@ const calendar = {
@@ -948,13 +960,13 @@ const calendar = {
gzYear : gzY ,
gzMonth : gzM ,
gzDay : gzD ,
isToday : isToday ,
isLeap : isLeap ,
nWeek : nWeek ,
ncWeek : '\u661f\u671f' + cWeek ,
isTerm : isTerm ,
Term : Term ,
astro : astro
isToday ,
isLeap ,
nWeek ,
ncWeek : ` \u 661F \u 671F ${ cWeek } ` ,
isTerm ,
Term ,
astro ,
}
} ,
@ -967,18 +979,20 @@ const calendar = {
@@ -967,18 +979,20 @@ const calendar = {
* @ return JSON object
* @ eg : console . log ( calendar . lunar2solar ( 1987 , 9 , 10 ) ) ;
* /
lunar2solar : function ( y , m , d , isLeapMonth ) {
lunar2solar ( y , m , d , isLeapMonth ) {
// 参数区间1900.1.31~2100.12.1
isLeapMonth = ! ! isLeapMonth
// let leapOffset = 0;
const leapMonth = calendar . leapMonth ( y )
// let leapDay = calendar.leapDays(y);
if ( isLeapMonth && leapMonth !== m ) return - 1 // 传参要求计算该闰月公历 但该年得出的闰月与传参的月份并不同
if ( isLeapMonth && leapMonth !== m )
return - 1 // 传参要求计算该闰月公历 但该年得出的闰月与传参的月份并不同
if (
( + y === 2100 && + m === 12 && + d > 1 ) ||
( + y === 1900 && + m === 1 && + d < 31 )
)
return - 1 // 超出了最大极限值
( + y === 2100 && + m === 12 && + d > 1 )
|| ( + y === 1900 && + m === 1 && + d < 31 )
) {
return - 1
} // 超出了最大极限值
const day = calendar . monthDays ( y , m )
let _day = day
// bugFix 2016-9-25
@ -986,7 +1000,8 @@ const calendar = {
@@ -986,7 +1000,8 @@ const calendar = {
if ( isLeapMonth ) {
_day = calendar . leapDays ( y , m )
}
if ( y < 1900 || y > 2100 || d > _day ) return - 1 // 参数合法性效验
if ( y < 1900 || y > 2100 || d > _day )
return - 1 // 参数合法性效验
// 计算农历的时间差
let offset = 0
@ -1007,7 +1022,8 @@ const calendar = {
@@ -1007,7 +1022,8 @@ const calendar = {
offset += calendar . monthDays ( y , i )
}
// 转换闰月农历 需补充该年闰月的前一个月的时差
if ( isLeapMonth ) offset += day
if ( isLeapMonth )
offset += day
// 1900年农历正月一日的公历时间为1900年1月30日0时0分0秒(该时间也是本农历的最开始起始点)
const stmap = Date . UTC ( 1900 , 1 , 30 , 0 , 0 , 0 )
const calObj = new Date ( ( offset + d - 31 ) * 86400000 + stmap )
@ -1016,7 +1032,7 @@ const calendar = {
@@ -1016,7 +1032,7 @@ const calendar = {
const cD = calObj . getUTCDate ( )
return calendar . solar2lunar ( cY , cM , cD )
}
} ,
}
const {