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

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

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

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

js代码
  1 <script language="JavaScript"><!--
  2 function CalConv(M)
  3  {
  4  
  5  FIRSTYEAR = 1936;
  6  LASTYEAR = 2031;
  7 
  8  LunarCal = [
  9   new tagLunarCal(2332171001001101110 ), /* 1936 */ 
 10   new tagLunarCal( 4104231001001011101 ), 
 11   new tagLunarCal( 3075281100100101101 ), 
 12   new tagLunarCal( 4906331100100101011 ), 
 13   new tagLunarCal( 3800381101010010101 ), /* 1940 */ 
 14   new tagLunarCal( 2662441101101001010 ), 
 15   new tagLunarCal( 4503491011010101010 ), 
 16   new tagLunarCal( 3504540101011010101 ), 
 17   new tagLunarCal( 2445591010101011011 ), /* 1944 */ 
 18   new tagLunarCal( 430050010010111011 ), 
 19   new tagLunarCal( 3201101001001011011 ), 
 20   new tagLunarCal( 2122151100100101011 ), 
 21   new tagLunarCal( 4003201010100101011 ), /* 1948 */ 
 22   new tagLunarCal( 2875261011010010101 ), 
 23   new tagLunarCal( 4706310110110010101 ), 
 24   new tagLunarCal( 3600361011010101010 ), 
 25   new tagLunarCal( 2651410101010110101 ), /* 1952 */ 
 26   new tagLunarCal( 4403470100110110101 ), 
 27   new tagLunarCal( 3304521010010110110 ), 
 28   new tagLunarCal( 2335570101001010111 ), 
 29   new tagLunarCal( 420620101001010111 ), /* 1956 */ 
 30   new tagLunarCal( 308181010100101010 ), 
 31   new tagLunarCal( 4802131110100101010 ), 
 32   new tagLunarCal( 3803180110101010101 ), 
 33   new tagLunarCal( 2764231010110101010 ), /* 1960 */ 
 34   new tagLunarCal( 4506291010101101010 ), 
 35   new tagLunarCal( 3500340100101101101 ), 
 36   new tagLunarCal( 2441391010010101110 ), 
 37   new tagLunarCal( 4302441010010101110 ), /* 1964 */ 
 38   new tagLunarCal( 3204500101001001101 ), 
 39   new tagLunarCal( 2035551110100100110 ), 
 40   new tagLunarCal( 390601101100101010 ), 
 41   new tagLunarCal( 297050101101010101 ), /* 1968 */ 
 42   new tagLunarCal( 4702110101011010101 ), 
 43   new tagLunarCal( 3603161001011011010 ), 
 44   new tagLunarCal( 2654210100101011101 ), 
 45   new tagLunarCal( 4505260100101011011 ), /* 1972 */ 
 46   new tagLunarCal( 3300321010010011011 ), 
 47   new tagLunarCal( 2241371101001001101 ), 
 48   new tagLunarCal( 4102421101001001011 ), 
 49   new tagLunarCal( 3083471101010100101 ), /* 1976 */ 
 50   new tagLunarCal( 4805531011010101001 ), 
 51   new tagLunarCal( 3706581011011010101 ), 
 52   new tagLunarCal( 276031001011011010 ), 
 53   new tagLunarCal( 460181001010110110 ), /* 1980 */ 
 54   new tagLunarCal( 3503140100100110111 ), 
 55   new tagLunarCal( 2444191010010010111 ), 
 56   new tagLunarCal( 4305241010010010111 ), 
 57   new tagLunarCal( 32106291011001001011 ), /* 1984 */ 
 58   new tagLunarCal( 5001350110101001010 ), 
 59   new tagLunarCal( 3902400110110101001 ), 
 60   new tagLunarCal( 2863451010110110100 ), 
 61   new tagLunarCal( 4704501010101101101 ), /* 1988 */ 
 62   new tagLunarCal( 3606561001001101110 ), 
 63   new tagLunarCal( 265010100100101111 ), 
 64   new tagLunarCal( 450160100100101110 ), 
 65   new tagLunarCal( 3402110110010010110 ), /* 1992 */ 
 66   new tagLunarCal( 2234170110101001010 ), 
 67   new tagLunarCal( 4005221110101001010 ), 
 68   new tagLunarCal( 3086270110101100101 ), 
 69   new tagLunarCal( 4900320101101011001 ), /* 1996 */ 
 70   new tagLunarCal( 3702381010101101101 ), 
 71   new tagLunarCal( 2753431001001101101 ), 
 72   new tagLunarCal( 46,  04481001001011101 ), /* 1999 */
 73   new tagLunarCal( 35,  05531100100101101 ), /* 2000 */
 74   new tagLunarCal( 23,  40591101010010101 ),
 75   new tagLunarCal( 42,  01,  41101010010101 ),
 76   new tagLunarCal( 31,  02,  91101101001010 ),
 77   new tagLunarCal( 21,  23140101101010101 ), /* 2004 */
 78   new tagLunarCal( 39,  05200101011010101 ),
 79   new tagLunarCal( 28,  76251010101011011 ),
 80   new tagLunarCal( 48,  00300010010111011 ),
 81   new tagLunarCal( 37,  01351001001011011 ), /* 2008 */
 82   new tagLunarCal( 25,  53411100100101011 ),
 83   new tagLunarCal( 44,  04461010100101011 ),
 84   new tagLunarCal( 33,  05511011010010101 ),
 85   new tagLunarCal( 22,  46561011010101010 ), /* 2012 */
 86   new tagLunarCal( 40,  01,  21011010101010 ),
 87   new tagLunarCal( 30,  92,  70101010110101 ),
 88   new tagLunarCal( 49,  03120100101110101 ),
 89   new tagLunarCal( 38,  04171010010110110 ), /* 2016 */
 90   new tagLunarCal( 27,  66230101001010111 ),
 91   new tagLunarCal( 46,  00280101001010110 ),
 92   new tagLunarCal( 35,  01330110100100110 ),
 93   new tagLunarCal( 24,  42380111010010101 ), /* 2020 */
 94   new tagLunarCal( 42,  04440110101010101 ),
 95   new tagLunarCal( 31,  05491010110101010 ),
 96   new tagLunarCal( 21,  26540101010110101 ),
 97   new tagLunarCal( 40,  00590100101101101 ), /* 2024 */
 98   new tagLunarCal( 28,  62,  51010010101110 ),
 99   new tagLunarCal( 47,  03101010010011101 ),
100   new tagLunarCal( 36,  04151101001001101 ),
101   new tagLunarCal( 25,  55201110100100110 ), /* 2028 */
102   new tagLunarCal( 43,  00261101010100101 ),
103   new tagLunarCal( 32,  01311101101010100 ),
104   new tagLunarCal( 22,  32360110101101010 ) ];
105 
106 
107  /* 西曆年每月之日數 */
108  SolarCal = [ 312831303130313130313031 ];
109 
110  /* 西曆年每月之累積日數, 平年與閏年 */
111  SolarDays = [
112   0315990120151181212243273304334365396,
113   0316091121152182213244274305335366397 ];
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

原文地址:https://www.cnblogs.com/rayray/p/1779414.html