阴历转阳历&&阳历转阴历&&星座查询

最近对星座很感兴趣,想做一个查询星座的程序,算法是现有的,还有就是阴历和阳历转换的问题,所以有找的阴历和阳历相互转换的程序,不过是js,来自搜狐星座的js代码,经过修改加工,放到WM上面。代码和程序放到最后贴上。

希望能够认识喜欢手机开发的朋友,一起交流学习。

阴历和阳历相互转换js代码如下

 

ExpandedBlockStart.gif js代码
  1  < script language = " JavaScript " ><!--
  2  function  CalConv(M)
  3   {
  4   
  5   FIRSTYEAR  =   1936 ;
  6   LASTYEAR  =   2031 ;
  7 
  8   LunarCal  =  [
  9     new  tagLunarCal( 23 3 2 17 1 0 0 1 0 0 1 1 0 1 1 1 0  ),  /*  1936  */  
 10     new  tagLunarCal(  41 0 4 23 1 0 0 1 0 0 1 0 1 1 1 0 1  ), 
 11     new  tagLunarCal(  30 7 5 28 1 1 0 0 1 0 0 1 0 1 1 0 1  ), 
 12     new  tagLunarCal(  49 0 6 33 1 1 0 0 1 0 0 1 0 1 0 1 1  ), 
 13     new  tagLunarCal(  38 0 0 38 1 1 0 1 0 1 0 0 1 0 1 0 1  ),  /*  1940  */  
 14     new  tagLunarCal(  26 6 2 44 1 1 0 1 1 0 1 0 0 1 0 1 0  ), 
 15     new  tagLunarCal(  45 0 3 49 1 0 1 1 0 1 0 1 0 1 0 1 0  ), 
 16     new  tagLunarCal(  35 0 4 54 0 1 0 1 0 1 1 0 1 0 1 0 1  ), 
 17     new  tagLunarCal(  24 4 5 59 1 0 1 0 1 0 1 0 1 1 0 1 1  ),  /*  1944  */  
 18     new  tagLunarCal(  43 0 0 5 0 0 1 0 0 1 0 1 1 1 0 1 1  ), 
 19     new  tagLunarCal(  32 0 1 10 1 0 0 1 0 0 1 0 1 1 0 1 1  ), 
 20     new  tagLunarCal(  21 2 2 15 1 1 0 0 1 0 0 1 0 1 0 1 1  ), 
 21     new  tagLunarCal(  40 0 3 20 1 0 1 0 1 0 0 1 0 1 0 1 1  ),  /*  1948  */  
 22     new  tagLunarCal(  28 7 5 26 1 0 1 1 0 1 0 0 1 0 1 0 1  ), 
 23     new  tagLunarCal(  47 0 6 31 0 1 1 0 1 1 0 0 1 0 1 0 1  ), 
 24     new  tagLunarCal(  36 0 0 36 1 0 1 1 0 1 0 1 0 1 0 1 0  ), 
 25     new  tagLunarCal(  26 5 1 41 0 1 0 1 0 1 0 1 1 0 1 0 1  ),  /*  1952  */  
 26     new  tagLunarCal(  44 0 3 47 0 1 0 0 1 1 0 1 1 0 1 0 1  ), 
 27     new  tagLunarCal(  33 0 4 52 1 0 1 0 0 1 0 1 1 0 1 1 0  ), 
 28     new  tagLunarCal(  23 3 5 57 0 1 0 1 0 0 1 0 1 0 1 1 1  ), 
 29     new  tagLunarCal(  42 0 6 2 0 1 0 1 0 0 1 0 1 0 1 1 1  ),  /*  1956  */  
 30     new  tagLunarCal(  30 8 1 8 1 0 1 0 1 0 0 1 0 1 0 1 0  ), 
 31     new  tagLunarCal(  48 0 2 13 1 1 1 0 1 0 0 1 0 1 0 1 0  ), 
 32     new  tagLunarCal(  38 0 3 18 0 1 1 0 1 0 1 0 1 0 1 0 1  ), 
 33     new  tagLunarCal(  27 6 4 23 1 0 1 0 1 1 0 1 0 1 0 1 0  ),  /*  1960  */  
 34     new  tagLunarCal(  45 0 6 29 1 0 1 0 1 0 1 1 0 1 0 1 0  ), 
 35     new  tagLunarCal(  35 0 0 34 0 1 0 0 1 0 1 1 0 1 1 0 1  ), 
 36     new  tagLunarCal(  24 4 1 39 1 0 1 0 0 1 0 1 0 1 1 1 0  ), 
 37     new  tagLunarCal(  43 0 2 44 1 0 1 0 0 1 0 1 0 1 1 1 0  ),  /*  1964  */  
 38     new  tagLunarCal(  32 0 4 50 0 1 0 1 0 0 1 0 0 1 1 0 1  ), 
 39     new  tagLunarCal(  20 3 5 55 1 1 1 0 1 0 0 1 0 0 1 1 0  ), 
 40     new  tagLunarCal(  39 0 6 0 1 1 0 1 1 0 0 1 0 1 0 1 0  ), 
 41     new  tagLunarCal(  29 7 0 5 0 1 0 1 1 0 1 0 1 0 1 0 1  ),  /*  1968  */  
 42     new  tagLunarCal(  47 0 2 11 0 1 0 1 0 1 1 0 1 0 1 0 1  ), 
 43     new  tagLunarCal(  36 0 3 16 1 0 0 1 0 1 1 0 1 1 0 1 0  ), 
 44     new  tagLunarCal(  26 5 4 21 0 1 0 0 1 0 1 0 1 1 1 0 1  ), 
 45     new  tagLunarCal(  45 0 5 26 0 1 0 0 1 0 1 0 1 1 0 1 1  ),  /*  1972  */  
 46     new  tagLunarCal(  33 0 0 32 1 0 1 0 0 1 0 0 1 1 0 1 1  ), 
 47     new  tagLunarCal(  22 4 1 37 1 1 0 1 0 0 1 0 0 1 1 0 1  ), 
 48     new  tagLunarCal(  41 0 2 42 1 1 0 1 0 0 1 0 0 1 0 1 1  ), 
 49     new  tagLunarCal(  30 8 3 47 1 1 0 1 0 1 0 1 0 0 1 0 1  ),  /*  1976  */  
 50     new  tagLunarCal(  48 0 5 53 1 0 1 1 0 1 0 1 0 1 0 0 1  ), 
 51     new  tagLunarCal(  37 0 6 58 1 0 1 1 0 1 1 0 1 0 1 0 1  ), 
 52     new  tagLunarCal(  27 6 0 3 1 0 0 1 0 1 1 0 1 1 0 1 0  ), 
 53     new  tagLunarCal(  46 0 1 8 1 0 0 1 0 1 0 1 1 0 1 1 0  ),  /*  1980  */  
 54     new  tagLunarCal(  35 0 3 14 0 1 0 0 1 0 0 1 1 0 1 1 1  ), 
 55     new  tagLunarCal(  24 4 4 19 1 0 1 0 0 1 0 0 1 0 1 1 1  ), 
 56     new  tagLunarCal(  43 0 5 24 1 0 1 0 0 1 0 0 1 0 1 1 1  ), 
 57     new  tagLunarCal(  32 10 6 29 1 0 1 1 0 0 1 0 0 1 0 1 1  ),  /*  1984  */  
 58     new  tagLunarCal(  50 0 1 35 0 1 1 0 1 0 1 0 0 1 0 1 0  ), 
 59     new  tagLunarCal(  39 0 2 40 0 1 1 0 1 1 0 1 0 1 0 0 1  ), 
 60     new  tagLunarCal(  28 6 3 45 1 0 1 0 1 1 0 1 1 0 1 0 0  ), 
 61     new  tagLunarCal(  47 0 4 50 1 0 1 0 1 0 1 1 0 1 1 0 1  ),  /*  1988  */  
 62     new  tagLunarCal(  36 0 6 56 1 0 0 1 0 0 1 1 0 1 1 1 0  ), 
 63     new  tagLunarCal(  26 5 0 1 0 1 0 0 1 0 0 1 0 1 1 1 1  ), 
 64     new  tagLunarCal(  45 0 1 6 0 1 0 0 1 0 0 1 0 1 1 1 0  ), 
 65     new  tagLunarCal(  34 0 2 11 0 1 1 0 0 1 0 0 1 0 1 1 0  ),  /*  1992  */  
 66     new  tagLunarCal(  22 3 4 17 0 1 1 0 1 0 1 0 0 1 0 1 0  ), 
 67     new  tagLunarCal(  40 0 5 22 1 1 1 0 1 0 1 0 0 1 0 1 0  ), 
 68     new  tagLunarCal(  30 8 6 27 0 1 1 0 1 0 1 1 0 0 1 0 1  ), 
 69     new  tagLunarCal(  49 0 0 32 0 1 0 1 1 0 1 0 1 1 0 0 1  ),  /*  1996  */  
 70     new  tagLunarCal(  37 0 2 38 1 0 1 0 1 0 1 1 0 1 1 0 1  ), 
 71     new  tagLunarCal(  27 5 3 43 1 0 0 1 0 0 1 1 0 1 1 0 1  ), 
 72     new  tagLunarCal(  46 ,   0 4 48 1 0 0 1 0 0 1 0 1 1 1 0 1  ),  /*  1999  */
 73     new  tagLunarCal(  35 ,   0 5 53 1 1 0 0 1 0 0 1 0 1 1 0 1  ),  /*  2000  */
 74     new  tagLunarCal(  23 ,   4 0 59 1 1 0 1 0 1 0 0 1 0 1 0 1  ),
 75     new  tagLunarCal(  42 ,   0 1 ,   4 1 1 0 1 0 1 0 0 1 0 1 0 1  ),
 76     new  tagLunarCal(  31 ,   0 2 ,   9 1 1 0 1 1 0 1 0 0 1 0 1 0  ),
 77     new  tagLunarCal(  21 ,   2 3 14 0 1 0 1 1 0 1 0 1 0 1 0 1  ),  /*  2004  */
 78     new  tagLunarCal(  39 ,   0 5 20 0 1 0 1 0 1 1 0 1 0 1 0 1  ),
 79     new  tagLunarCal(  28 ,   7 6 25 1 0 1 0 1 0 1 0 1 1 0 1 1  ),
 80     new  tagLunarCal(  48 ,   0 0 30 0 0 1 0 0 1 0 1 1 1 0 1 1  ),
 81     new  tagLunarCal(  37 ,   0 1 35 1 0 0 1 0 0 1 0 1 1 0 1 1  ),  /*  2008  */
 82     new  tagLunarCal(  25 ,   5 3 41 1 1 0 0 1 0 0 1 0 1 0 1 1  ),
 83     new  tagLunarCal(  44 ,   0 4 46 1 0 1 0 1 0 0 1 0 1 0 1 1  ),
 84     new  tagLunarCal(  33 ,   0 5 51 1 0 1 1 0 1 0 0 1 0 1 0 1  ),
 85     new  tagLunarCal(  22 ,   4 6 56 1 0 1 1 0 1 0 1 0 1 0 1 0  ),  /*  2012  */
 86     new  tagLunarCal(  40 ,   0 1 ,   2 1 0 1 1 0 1 0 1 0 1 0 1 0  ),
 87     new  tagLunarCal(  30 ,   9 2 ,   7 0 1 0 1 0 1 0 1 1 0 1 0 1  ),
 88     new  tagLunarCal(  49 ,   0 3 12 0 1 0 0 1 0 1 1 1 0 1 0 1  ),
 89     new  tagLunarCal(  38 ,   0 4 17 1 0 1 0 0 1 0 1 1 0 1 1 0  ),  /*  2016  */
 90     new  tagLunarCal(  27 ,   6 6 23 0 1 0 1 0 0 1 0 1 0 1 1 1  ),
 91     new  tagLunarCal(  46 ,   0 0 28 0 1 0 1 0 0 1 0 1 0 1 1 0  ),
 92     new  tagLunarCal(  35 ,   0 1 33 0 1 1 0 1 0 0 1 0 0 1 1 0  ),
 93     new  tagLunarCal(  24 ,   4 2 38 0 1 1 1 0 1 0 0 1 0 1 0 1  ),  /*  2020  */
 94     new  tagLunarCal(  42 ,   0 4 44 0 1 1 0 1 0 1 0 1 0 1 0 1  ),
 95     new  tagLunarCal(  31 ,   0 5 49 1 0 1 0 1 1 0 1 0 1 0 1 0  ),
 96     new  tagLunarCal(  21 ,   2 6 54 0 1 0 1 0 1 0 1 1 0 1 0 1  ),
 97     new  tagLunarCal(  40 ,   0 0 59 0 1 0 0 1 0 1 1 0 1 1 0 1  ),  /*  2024  */
 98     new  tagLunarCal(  28 ,   6 2 ,   5 1 0 1 0 0 1 0 1 0 1 1 1 0  ),
 99     new  tagLunarCal(  47 ,   0 3 10 1 0 1 0 0 1 0 0 1 1 1 0 1  ),
100     new  tagLunarCal(  36 ,   0 4 15 1 1 0 1 0 0 1 0 0 1 1 0 1  ),
101     new  tagLunarCal(  25 ,   5 5 20 1 1 1 0 1 0 0 1 0 0 1 1 0  ),  /*  2028  */
102     new  tagLunarCal(  43 ,   0 0 26 1 1 0 1 0 1 0 1 0 0 1 0 1  ),
103     new  tagLunarCal(  32 ,   0 1 31 1 1 0 1 1 0 1 0 1 0 1 0 0  ),
104     new  tagLunarCal(  22 ,   3 2 36 0 1 1 0 1 0 1 1 0 1 0 1 0  ) ];
105 
106 
107    /*  西曆年每月之日數  */
108   SolarCal  =  [  31 28 31 30 31 30 31 31 30 31 30 31  ];
109 
110    /*  西曆年每月之累積日數, 平年與閏年  */
111   SolarDays  =  [
112     0 31 59 90 120 151 181 212 243 273 304 334 365 396 ,
113     0 31 60 91 121 152 182 213 244 274 305 335 366 397  ];
114 
115   AnimalIdx  =  [ " 馬  " " 羊  " " 猴  " " 雞  " " 狗  " " 豬  " " 鼠  " " 牛  " " 虎  " " 兔  " " 龍  " " 蛇  "  ];
116   LocationIdx  =  [  " " " " " " " 西 "  ];
117   
118   
119  if  (M == 0 ) {   // 阳历到阴历
120  if  ( ! IsInteger(form_jisuan.yyear.value)  ||   ! IsInteger(form_jisuan.ymonth.value)  ||   ! IsInteger(form_jisuan.yday.value))  return  alert( " 请输入合法阳历年月日数值 " );   
121   SolarYear  =  parseInt(form_jisuan.yyear.value);
122   SolarMonth  =  parseInt(form_jisuan.ymonth.value);
123   SolarDate  =  parseInt(form_jisuan.yday.value);
124 
125 
126    if  ( SolarYear  <=  FIRSTYEAR  ||  SolarYear  >  LASTYEAR )  return  alert( " 请输入1936-2031有效年份 " ); 
127 
128   sm  =  SolarMonth  -   1 ;
129   
130    if  ( sm  <   0   ||  sm  >   11  )  return  alert(请输入有效月份);
131   
132   leap  =  GetLeap( SolarYear );
133 
134    if  ( sm  ==   1  )
135    d  =  leap  +   28 ;
136    else
137    d  =  SolarCal[sm];
138 
139    if  ( SolarDate  <   1   ||  SolarDate  >  d )  return   3 ;
140 
141   y  =  SolarYear  -  FIRSTYEAR;
142   acc  =  SolarDays[ leap * 14   +  sm ]  +  SolarDate;
143   kc  =  acc  +  LunarCal[y].BaseKanChih;
144   Kan  =  kc  %   10 ;
145   Chih  =  kc  %   12 ;
146   Location  =  LocationIdx[kc  %   4 ];
147   Age  =  kc  %   60 ;
148    if  ( Age  <   22  )
149    Age  =   22   -  Age;
150    else
151    Age  =   82   -  Age;
152 
153   Age  = Age  +   3 ;
154 
155  if  (Age  <   10 )
156    Age = Age + 60 ;
157 
158   Animal  =  AnimalIdx[ Chih ];
159 
160    if  ( acc  <=  LunarCal[y].BaseDays ) {
161    y -- ;
162    LunarYear  =  SolarYear  -   1 ;
163    leap  =  GetLeap( LunarYear );
164    sm  +=   12 ;
165    acc  =  SolarDays[leap * 14   +  sm]  +  SolarDate;
166    }
167    else
168    LunarYear  =  SolarYear;
169    
170   l1  =  LunarCal[y].BaseDays;
171    for  ( i = 0 ; i < 13 ; i ++  ) {
172    l2  =  l1  +  LunarCal[y].MonthDays[i]  +   29 ;
173     if  ( acc  <=  l2 )  break ;
174    l1  =  l2;
175    }
176 
177   LunarMonth  =  i  +   1 ;
178   LunarDate  =  acc  -  l1;
179   im  =  LunarCal[y].Intercalation;
180 
181    if  ( im  !=   0   &&  LunarMonth  >  im ) {
182    LunarMonth -- ;
183     if  ( LunarMonth  ==  im ) LunarMonth  =   - im;
184    }
185 
186    if  ( LunarMonth  >   12  ) LunarMonth  -=   12 ;
187 
188  alert( " 农历为: " +  LunarYear  +   " "   +  LunarMonth  +   " 月  "   +  LunarDate  +   " 日  "  );
189                  
190              form_jisuan.yyear.value  =   "" ;
191              form_jisuan.ymonth.value  =   "" ;
192              form_jisuan.yday.value  =   ""
193    return   0 ;
194   }
195 
196    else   /*  阴历转阳历  */  
197   { 
198      if  ( ! IsInteger(form_jisuan.nyear.value)  ||   ! IsInteger(form_jisuan.nmonth.value)  ||   ! IsInteger(form_jisuan.nday.value))  return  alert( " 请输入合法农历年月日数值 " );   
199     LunarYear  =  parseInt(form_jisuan.nyear.value);
200     LunarMonth  =  parseInt(form_jisuan.nmonth.value);
201     LunarDate  =  parseInt(form_jisuan.nday.value);
202 
203           if  ( LunarYear  <  FIRSTYEAR  ||  LunarYear  >=  LASTYEAR )  return  alert( " 请输入1936-2031有效年份 " );   
204          
205          y  =  LunarYear  -  FIRSTYEAR ; 
206          im  =  LunarCal[y].Intercalation; 
207          lm  =  LunarMonth; 
208            
209           if  ( lm  <   0  ) 
210          { 
211               if  ( lm  !=   - im ) 
212                   return  alert(请输入有效月份);   
213          } 
214           else   if  ( lm  <   1   ||  lm  >   12  )  return  alert(请输入有效月份);   
215          
216           if  ( im  !=   0  ) 
217          { 
218               if  ( lm  >  im ) 
219                  lm ++
220               else   if  ( lm  ==   - im ) 
221                  lm  =  im  +   1
222          } 
223          lm --
224           if  ( LunarDate  >  LunarCal[y].MonthDays[lm]  +   29  ) 
225               return  alert( " 农历日期不正确 " );
226          acc  =   0 ;
227           for  ( i = 0 ; i  <  lm;i ++ ) {
228           acc +=  LunarCal[y].MonthDays[i]  +   29 ;
229         }
230          acc  += LunarCal[y].BaseDays  +  LunarDate;
231              leap  =  GetLeap( LunarYear );   
232           for  ( i = 13 ; i >= 0 ; i --  ) {
233               if  ( acc  >  SolarDays[leap * 14 + i] ) 
234                   break
235          }       
236               SolarDate  =  acc  -  SolarDays[leap * 14   +  i]  ;      
237               if  ( i  <=   11  ) 
238              { 
239                  SolarYear  =  LunarYear; 
240                  SolarMonth  =  i  +   1
241              } 
242               else  
243              { 
244                  
245                  SolarYear  =  LunarYear  +   1
246                  SolarMonth  =  i  -   11
247              }    
248              leap  =  GetLeap( SolarYear ); 
249              y  =  SolarYear  -  FIRSTYEAR;           
250               // acc = SolarDays[leap][SolarMonth-1] + SolarDate; 
251              acc  =  SolarDays[leap * 14   +  SolarMonth - 1 +  SolarDate;
252              weekday  =  ( acc  +  LunarCal[y].BaseWeekday )  %   7
253              kc  =  acc  +  LunarCal[y].BaseKanChih; 
254              kan  =  kc  %   10
255              chih  =  kc  %   12
256             
257              alert( " 阳历为: " +  SolarYear  +   " "   +  SolarMonth  +   " "   +  SolarDate  +   " 日  "  );        
258              form_jisuan.nyear.value  =   "" ;
259              form_jisuan.nmonth.value  =   "" ;
260              form_jisuan.nday.value  =   "" ;            
261               return   0 ;
262   } // else结束
263   
264   }
265 
266    /*  闰年, 返回 0 平年, 1 闰年  */
267  function  GetLeap( year )
268   {
269      if  ( year  %   400   ==   0  )
270        return   1 ;
271      else   if  ( year  %   100   ==   0  )
272        return   0 ;
273      else   if  ( year  %   4   ==   0  )
274        return   1 ;
275      else
276        return   0 ;
277   }
278 
279  function  tagLunarCal( d, i, w, k, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13) {
280    this .BaseDays  =  d;          /*  1 月 1 日到正月初一的累计日  */
281    this .Intercalation  =  i;     /*  闰月月份. 0==此年沒有闰月  */
282    this .BaseWeekday  =  w;       /*  此年 1 月 1 日为星期减 1  */
283    this .BaseKanChih  =  k;       /*  此年 1 月 1 日之干支序号减 1  */
284    this .MonthDays  =  [ m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13 ];  /*  此农历年每月之大小, 0==小月(29日), 1==大月(30日)  */
285  }
286  // --></script> 

 

 

源程序下载地址:

/Files/rayray/DeviceApplication14.rar

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值