@@ -571,7 +571,7 @@ export class Sound extends LoopTyme {
571571} 
572572
573573export  class  Taboo  extends  LoopTyme  { 
574-     static  NAMES : string [ ]  =  [ '祭祀' ,  '祈福' ,  '求嗣' ,  '开光' ,  '塑绘' ,  '齐醮' ,  '斋醮' ,  '沐浴' ,  '酬神' ,  '造庙' ,  '祀灶' ,  '焚香' ,  '谢土' ,  '出火' ,  '雕刻' ,  '嫁娶' ,  '订婚' ,  '纳采' ,  '问名' ,  '纳婿' ,  '归宁' ,  '安床' ,  '合帐' ,  '冠笄' ,  '订盟' ,  '进人口' ,  '裁衣' ,  '挽面' ,  '开容' ,  '修坟' ,  '启钻' ,  '破土' ,  '安葬' ,  '立碑' ,  '成服' ,  '除服' ,  '开生坟' ,  '合寿木' ,  '入殓' ,  '移柩' ,  '普渡' ,  '入宅' ,  '安香' ,  '安门' ,  '修造' ,  '起基' ,  '动土' ,  '上梁' ,  '竖柱' ,  '开井开池' ,  '作陂放水' ,  '拆卸' ,  '破屋' ,  '坏垣' ,  '补垣' ,  '伐木做梁' ,  '作灶' ,  '解除' ,  '开柱眼' ,  '穿屏扇架' ,  '盖屋合脊' ,  '开厕' ,  '造仓' ,  '塞穴' ,  '平治道涂' ,  '造桥' ,  '作厕' ,  '筑堤' ,  '开池' ,  '伐木' ,  '开渠' ,  '掘井' ,  '扫舍' ,  '放水' ,  '造屋' ,  '合脊' ,  '造畜稠' ,  '修门' ,  '定磉' ,  '作梁' ,  '修饰垣墙' ,  '架马' ,  '开市' ,  '挂匾' ,  '纳财' ,  '求财' ,  '开仓' ,  '买车' ,  '置产' ,  '雇庸 ' ,  '出货财' ,  '安机械' ,  '造车器' ,  '经络' ,  '酝酿' ,  '作染' ,  '鼓铸' ,  '造船' ,  '割蜜' ,  '栽种' ,  '取渔' ,  '结网' ,  '牧养' ,  '安碓磑' ,  '习艺' ,  '入学' ,  '理发' ,  '探病' ,  '见贵' ,  '乘船' ,  '渡水' ,  '针灸' ,  '出行' ,  '移徙' ,  '分居' ,  '剃头' ,  '整手足甲' ,  '纳畜' ,  '捕捉' ,  '畋猎' ,  '教牛马' ,  '会亲友' ,  '赴任' ,  '求医' ,  '治病' ,  '词讼' ,  '起基动土' ,  '破屋坏垣' ,  '盖屋' ,  '造仓库' ,  '立券交易' ,  '交易' ,  '立券' ,  '安机' ,  '会友' ,  '求医疗病' ,  '诸事不宜' ,  '馀事勿取' ,  '行丧' ,  '断蚁' ,  '归岫' ] ; 
574+     static  NAMES : string [ ]  =  [ '祭祀' ,  '祈福' ,  '求嗣' ,  '开光' ,  '塑绘' ,  '齐醮' ,  '斋醮' ,  '沐浴' ,  '酬神' ,  '造庙' ,  '祀灶' ,  '焚香' ,  '谢土' ,  '出火' ,  '雕刻' ,  '嫁娶' ,  '订婚' ,  '纳采' ,  '问名' ,  '纳婿' ,  '归宁' ,  '安床' ,  '合帐' ,  '冠笄' ,  '订盟' ,  '进人口' ,  '裁衣' ,  '挽面' ,  '开容' ,  '修坟' ,  '启钻' ,  '破土' ,  '安葬' ,  '立碑' ,  '成服' ,  '除服' ,  '开生坟' ,  '合寿木' ,  '入殓' ,  '移柩' ,  '普渡' ,  '入宅' ,  '安香' ,  '安门' ,  '修造' ,  '起基' ,  '动土' ,  '上梁' ,  '竖柱' ,  '开井开池' ,  '作陂放水' ,  '拆卸' ,  '破屋' ,  '坏垣' ,  '补垣' ,  '伐木做梁' ,  '作灶' ,  '解除' ,  '开柱眼' ,  '穿屏扇架' ,  '盖屋合脊' ,  '开厕' ,  '造仓' ,  '塞穴' ,  '平治道涂' ,  '造桥' ,  '作厕' ,  '筑堤' ,  '开池' ,  '伐木' ,  '开渠' ,  '掘井' ,  '扫舍' ,  '放水' ,  '造屋' ,  '合脊' ,  '造畜稠' ,  '修门' ,  '定磉' ,  '作梁' ,  '修饰垣墙' ,  '架马' ,  '开市' ,  '挂匾' ,  '纳财' ,  '求财' ,  '开仓' ,  '买车' ,  '置产' ,  '雇佣 ' ,  '出货财' ,  '安机械' ,  '造车器' ,  '经络' ,  '酝酿' ,  '作染' ,  '鼓铸' ,  '造船' ,  '割蜜' ,  '栽种' ,  '取渔' ,  '结网' ,  '牧养' ,  '安碓磑' ,  '习艺' ,  '入学' ,  '理发' ,  '探病' ,  '见贵' ,  '乘船' ,  '渡水' ,  '针灸' ,  '出行' ,  '移徙' ,  '分居' ,  '剃头' ,  '整手足甲' ,  '纳畜' ,  '捕捉' ,  '畋猎' ,  '教牛马' ,  '会亲友' ,  '赴任' ,  '求医' ,  '治病' ,  '词讼' ,  '起基动土' ,  '破屋坏垣' ,  '盖屋' ,  '造仓库' ,  '立券交易' ,  '交易' ,  '立券' ,  '安机' ,  '会友' ,  '求医疗病' ,  '诸事不宜' ,  '馀事勿取' ,  '行丧' ,  '断蚁' ,  '归岫' ] ; 
575575
576576    protected  static  dayTaboo : string [ ]  =  [ 
577577        '8319000776262322200C1E1D,06292C2E1F;0F11185C0001092A0D7014692983847B7C2C2E302F802D2B,06454F208A;111852838470795B302F404533802D152B39201E23221D212726,0F2E1F010D29;004023222089,0F29111847;11180001032A0D70795B2C2E302F802D4E152B33714161201F26,52095847;0F17000102061979454F3A15477677,241F8A20;34357C89,7129;1551000403706A454F3A3D771F262322271E1D21,382B415220;0F000102037039297175261F1D21,454F2E156341;00076A54196348767765,7920297115528A0D382B;11180001020439332C2E302F2B5844477515634C1F2721,0F520D19267A29717020;297170192C2E2D2F2B3E363F4C,0F5215632001034720;4C78,297172380D2A2E0F474841;18115C0001702A2C2E2F5283847129795B6375802D154C,1F208A24;1811795B032C2E302F802D4163754C27261E1D2120,010D0F29521F;00401D232289,71290F4720;0F170001020E032A70692C2E302F802D2B0D7129474C201F2322,5211183809615D;0F1811000102062A0D2C2D804B2B672E2F7129,70471F8A20;0007343589,0F71296B7080;175447440D15838477656A49,2B2E1F8A2022;11187129705B79000106032A0D397B6F7C802D2C2B61756627261E0C1D21,0F2E154147;0007385476771548,52061F20;0106111839513A2C2E2D2F8C804B4723221F63,71522920;1118000717161A2C2E3371292B56433D6375363F,0F010347208A;161A7889,292E1F0F3861;11180F00012A0D70795D7B7C39332D2C2E4E4863664C,064F478A20;5452838479195D00012A0D7B7C2C2E3348156366242526201E,0F7129;00262789,292C2E1F2B2F;040318111A17332C15290D200C7A,47450638;0004031A170F11332C2E302F1571292A657677451949,70201D52;007B343589,88;00010670175B71292A152322271E,03637C2B38;04067033392C7161262322271E1D210C,;000715547776,521F;181100012C2E2F1F,0F38;70076A363F,2920;7889,292E1F;0F707B7C00012F75,5220;528403395B2F1E20,0F01;4089,88;02060418110D332C2E415B637566262322271F20,520F;0F181100012C2E7129,5220;7C343589,88;0001020603691817452C2E2D498344,412B6A096338;393589,88;076A48,45752F29384C0F204F612B;000301394F2E154763751F27,0F707A802629710D1920;4F2C2E2B383F443D433663,0F01478A2015;201E27262322,89;0F000102700D335283845329711563,38048A7D4520;6A0339332C20528384531563,29713801000F0C47806B;005089,88;291503000D332E53261F2075,0F5238584F45;003989,88;3435000789,88;150001021745512E443D65262322,2B63387C;394889,88;00036A7415384878,45751F20240F522E834F;00010203332C2E2F1558631F,0F1920707A29712646;0717363F1A2C4F3A67433D8B,71290F010347;' , 
@@ -3096,26 +3096,24 @@ export class ShouXingUtil {
30963096export  class  SolarTerm  extends  LoopTyme  { 
30973097    static  NAMES : string [ ]  =  [ '冬至' ,  '小寒' ,  '大寒' ,  '立春' ,  '雨水' ,  '惊蛰' ,  '春分' ,  '清明' ,  '谷雨' ,  '立夏' ,  '小满' ,  '芒种' ,  '夏至' ,  '小暑' ,  '大暑' ,  '立秋' ,  '处暑' ,  '白露' ,  '秋分' ,  '寒露' ,  '霜降' ,  '立冬' ,  '小雪' ,  '大雪' ] ; 
30983098
3099+     protected  year : number ; 
30993100    protected  cursoryJulianDay : number ; 
31003101
3101-     protected  constructor ( year : number  |  string ,  indexOrName : number  |  string ,   cursoryJulianDay ?:  number )  { 
3102+     protected  constructor ( year : number  |  string ,  indexOrName : number  |  string )  { 
31023103        super ( SolarTerm . NAMES ,  indexOrName ) ; 
3103-         if  ( cursoryJulianDay )  { 
3104-             this . cursoryJulianDay  =  cursoryJulianDay ; 
3105-         }  else  { 
3106-             this . cursoryJulianDay  =  0 ; 
3107-             this . initByYear ( SolarTerm . numeric ( year ,  'lunar year' ) ,  typeof  indexOrName  ===  'number'  ? indexOrName  : this . index ) ; 
3104+         let  y : number  =  SolarTerm . numeric ( year ,  'lunar year' ) ; 
3105+         if  ( typeof  indexOrName  ===  'number' )  { 
3106+             const  size : number  =  SolarTerm . NAMES . length ; 
3107+             y  =  ~ ~ ( ( y  *  size  +  indexOrName )  /  size ) ; 
31083108        } 
3109-     } 
3110- 
3111-     protected  initByYear ( year : number ,  offset : number )  { 
3112-         const  jd : number  =  Math . floor ( ( year  -  2000 )  *  365.2422  +  180 ) ; 
3109+         const  jd : number  =  Math . floor ( ( y  -  2000 )  *  365.2422  +  180 ) ; 
31133110        // 355是2000.12冬至,得到较靠近jd的冬至估计值 
31143111        let  w : number  =  Math . floor ( ( jd  -  355  +  183 )  /  365.2422 )  *  365.2422  +  355 ; 
31153112        if  ( ShouXingUtil . calcQi ( w )  >  jd )  { 
31163113            w  -=  365.2422 ; 
31173114        } 
3118-         this . cursoryJulianDay  =  ShouXingUtil . calcQi ( w  +  15.2184  *  offset ) ; 
3115+         this . year  =  y ; 
3116+         this . cursoryJulianDay  =  ShouXingUtil . calcQi ( w  +  15.2184  *  this . index ) ; 
31193117    } 
31203118
31213119    static  fromIndex ( year : number  |  string ,  index : number ) : SolarTerm  { 
@@ -3127,7 +3125,9 @@ export class SolarTerm extends LoopTyme {
31273125    } 
31283126
31293127    next ( n : number ) : SolarTerm  { 
3130-         return  new  SolarTerm ( 0 ,  this . nextIndex ( n ) ,  this . cursoryJulianDay  +  15.2184  *  n ) ; 
3128+         const  size : number  =  this . getSize ( ) ; 
3129+         const  i : number  =  this . index  +  n ; 
3130+         return  SolarTerm . fromIndex ( ~ ~ ( ( this . year  *  size  +  i )  /  size ) ,  this . indexOfBy ( i ) ) ; 
31313131    } 
31323132
31333133    isJie ( ) : boolean  { 
@@ -3142,6 +3142,10 @@ export class SolarTerm extends LoopTyme {
31423142        return  JulianDay . fromJulianDay ( ShouXingUtil . qiAccurate2 ( this . cursoryJulianDay )  +  JulianDay . J2000 ) ; 
31433143    } 
31443144
3145+     getYear ( ) : number  { 
3146+         return  this . year ; 
3147+     } 
3148+ 
31453149    getCursoryJulianDay ( ) : number  { 
31463150        return  this . cursoryJulianDay ; 
31473151    } 
@@ -3264,18 +3268,8 @@ export class SolarHalfYear extends AbstractTyme {
32643268    } 
32653269
32663270    next ( n : number ) : SolarHalfYear  { 
3267-         let  i : number  =  this . index ; 
3268-         let  y : number  =  this . getYear ( ) ; 
3269-         if  ( n  !=  0 )  { 
3270-             i  +=  n ; 
3271-             y  +=  ~ ~ ( i  /  2 ) ; 
3272-             i  %=  2 ; 
3273-             if  ( i  <  0 )  { 
3274-                 i  +=  2 ; 
3275-                 y  -=  1 ; 
3276-             } 
3277-         } 
3278-         return  SolarHalfYear . fromIndex ( y ,  i ) ; 
3271+         const  i : number  =  this . index  +  n ; 
3272+         return  SolarHalfYear . fromIndex ( ~ ~ ( ( this . getYear ( )  *  2  +  i )  /  2 ) ,  this . indexOf ( i ,  2 ) ) ; 
32793273    } 
32803274
32813275    getMonths ( ) : SolarMonth [ ]  { 
@@ -3337,18 +3331,8 @@ export class SolarSeason extends AbstractTyme {
33373331    } 
33383332
33393333    next ( n : number ) : SolarSeason  { 
3340-         let  i : number  =  this . index ; 
3341-         let  y : number  =  this . year . getYear ( ) ; 
3342-         if  ( n  !=  0 )  { 
3343-             i  +=  n ; 
3344-             y  +=  ~ ~ ( i  /  4 ) ; 
3345-             i  %=  4 ; 
3346-             if  ( i  <  0 )  { 
3347-                 i  +=  4 ; 
3348-                 y  -=  1 ; 
3349-             } 
3350-         } 
3351-         return  SolarSeason . fromIndex ( y ,  i ) ; 
3334+         const  i : number  =  this . index  +  n ; 
3335+         return  SolarSeason . fromIndex ( ~ ~ ( ( this . getYear ( )  *  4  +  i )  /  4 ) ,  this . indexOf ( i ,  4 ) ) ; 
33523336    } 
33533337
33543338    getMonths ( ) : SolarMonth [ ]  { 
@@ -3426,18 +3410,8 @@ export class SolarMonth extends AbstractTyme {
34263410    } 
34273411
34283412    next ( n : number ) : SolarMonth  { 
3429-         let  m : number  =  this . month ; 
3430-         let  y : number  =  this . getYear ( ) ; 
3431-         if  ( n  !=  0 )  { 
3432-             m  +=  n ; 
3433-             y  +=  ~ ~ ( m  /  12 ) ; 
3434-             m  %=  12 ; 
3435-             if  ( m  <  1 )  { 
3436-                 m  +=  12 ; 
3437-                 y -- ; 
3438-             } 
3439-         } 
3440-         return  SolarMonth . fromYm ( y ,  m ) ; 
3413+         const  i : number  =  this . month  -  1  +  n ; 
3414+         return  SolarMonth . fromYm ( ~ ~ ( ( this . getYear ( )  *  12  +  i )  /  12 ) ,  this . indexOf ( i ,  12 )  +  1 ) ; 
34413415    } 
34423416
34433417    getWeeks ( start : number ) : SolarWeek [ ]  { 
@@ -3622,32 +3596,8 @@ export class SolarDay extends AbstractTyme {
36223596    } 
36233597
36243598    getConstellation ( ) : Constellation  { 
3625-         let  index : number  =  11 ; 
36263599        const  y : number  =  this . getMonth ( )  *  100  +  this . day ; 
3627-         if  ( y  >=  321  &&  y  <=  419 )  { 
3628-             index  =  0 ; 
3629-         }  else  if  ( y  >=  420  &&  y  <=  520 )  { 
3630-             index  =  1 ; 
3631-         }  else  if  ( y  >=  521  &&  y  <=  621 )  { 
3632-             index  =  2 ; 
3633-         }  else  if  ( y  >=  622  &&  y  <=  722 )  { 
3634-             index  =  3 ; 
3635-         }  else  if  ( y  >=  723  &&  y  <=  822 )  { 
3636-             index  =  4 ; 
3637-         }  else  if  ( y  >=  823  &&  y  <=  922 )  { 
3638-             index  =  5 ; 
3639-         }  else  if  ( y  >=  923  &&  y  <=  1023 )  { 
3640-             index  =  6 ; 
3641-         }  else  if  ( y  >=  1024  &&  y  <=  1122 )  { 
3642-             index  =  7 ; 
3643-         }  else  if  ( y  >=  1123  &&  y  <=  1221 )  { 
3644-             index  =  8 ; 
3645-         }  else  if  ( y  >=  1222  ||  y  <=  119 )  { 
3646-             index  =  9 ; 
3647-         }  else  if  ( y  <=  218 )  { 
3648-             index  =  10 ; 
3649-         } 
3650-         return  Constellation . fromIndex ( index ) ; 
3600+         return  Constellation . fromIndex ( y  >  1221  ||  y  <  120  ? 9  : y  <  219  ? 10  : y  <  321  ? 11  : y  <  420  ? 0  : y  <  521  ? 1  : y  <  622  ? 2  : y  <  723  ? 3  : y  <  823  ? 4  : y  <  923  ? 5  : y  <  1024  ? 6  : y  <  1123  ? 7  : 8 ) ; 
36513601    } 
36523602
36533603    getName ( ) : string  { 
@@ -4205,16 +4155,9 @@ export class SolarFestival extends AbstractTyme {
42054155    } 
42064156
42074157    next ( n : number ) : SolarFestival  |  null  { 
4208-         if  ( n  ===  0 )  { 
4209-             return  SolarFestival . fromYmd ( this . day . getYear ( ) ,  this . day . getMonth ( ) ,  this . day . getDay ( ) ) ; 
4210-         } 
42114158        const  size : number  =  SolarFestival . NAMES . length ; 
4212-         let  t : number  =  this . index  +  n ; 
4213-         const  offset : number  =  this . indexOf ( t ,  size ) ; 
4214-         if  ( t  <  0 )  { 
4215-             t  -=  size ; 
4216-         } 
4217-         return  SolarFestival . fromIndex ( this . day . getYear ( )  +  ~ ~ ( t  /  size ) ,  offset ) ; 
4159+         const  i : number  =  this . index  +  n ; 
4160+         return  SolarFestival . fromIndex ( ~ ~ ( ( this . day . getYear ( )  *  size  +  i )  /  size ) ,  this . indexOf ( i ,  size ) ) ; 
42184161    } 
42194162} 
42204163
@@ -4313,16 +4256,9 @@ export class LunarFestival extends AbstractTyme {
43134256    } 
43144257
43154258    next ( n : number ) : LunarFestival  { 
4316-         if  ( n  ===  0 )  { 
4317-             return  LunarFestival . fromYmd ( this . day . getYear ( ) ,  this . day . getMonth ( ) ,  this . day . getDay ( ) )  as  LunarFestival ; 
4318-         } 
43194259        const  size : number  =  LunarFestival . NAMES . length ; 
4320-         let  t : number  =  this . index  +  n ; 
4321-         const  offset : number  =  this . indexOf ( t ,  size ) ; 
4322-         if  ( t  <  0 )  { 
4323-             t  -=  size ; 
4324-         } 
4325-         return  LunarFestival . fromIndex ( this . day . getYear ( )  +  ~ ~ ( t  /  size ) ,  offset )  as  LunarFestival ; 
4260+         const  i : number  =  this . index  +  n ; 
4261+         return  LunarFestival . fromIndex ( ~ ~ ( ( this . day . getYear ( )  *  size  +  i )  /  size ) ,  this . indexOf ( i ,  size ) )  as  LunarFestival ; 
43264262    } 
43274263} 
43284264
@@ -4679,16 +4615,7 @@ export class ChildLimit {
46794615    } 
46804616
46814617    getEndLunarYear ( ) : LunarYear  { 
4682-         const  endTime : SolarTime  =  this . getEndTime ( ) ; 
4683-         const  solarYear : number  =  endTime . getYear ( ) ; 
4684-         let  y : LunarYear  =  endTime . getLunarHour ( ) . getLunarDay ( ) . getLunarMonth ( ) . getLunarYear ( ) ; 
4685-         if  ( y . getYear ( )  <  solarYear )  { 
4686-             // 正月初一在立春之后的,农历年往后推一年 
4687-             if  ( LunarHour . fromYmdHms ( solarYear ,  1 ,  1 ,  0 ,  0 ,  0 ) . getSolarTime ( ) . isAfter ( SolarTerm . fromIndex ( solarYear ,  3 ) . getJulianDay ( ) . getSolarTime ( ) ) )  { 
4688-                 y  =  y . next ( 1 ) ; 
4689-             } 
4690-         } 
4691-         return  y ; 
4618+         return  LunarYear . fromYear ( this . getStartTime ( ) . getLunarHour ( ) . getYear ( )  +  this . getEndTime ( ) . getYear ( )  -  this . getStartTime ( ) . getYear ( ) ) ; 
46924619    } 
46934620} 
46944621
0 commit comments