zoukankan      html  css  js  c++  java
  • 阴历转阳历&&阳历转阴历&&星座查询

    最近对星座很感兴趣,想做一个查询星座的程序,算法是现有的,还有就是阴历和阳历转换的问题,所以有找的阴历和阳历相互转换的程序,不过是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

  • 相关阅读:
    C# 读写Excel(NPOI库)
    sql server存储过程回滚事务
    sql server的循环语句
    NopCommerce的autofac的理解
    Django——django连接mysql
    bootstrap
    常用模块杂碎小知识
    常识小知识——(1)
    Django——用户注册并展示出注册信息表案例
    Django——orm概述及在django中使用
  • 原文地址:https://www.cnblogs.com/rayray/p/1779414.html
Copyright © 2011-2022 走看看