zoukankan      html  css  js  c++  java
  • 公历和农历转换的JS代码

    <!--
    function CalConv(M)
     {
     
     FIRSTYEAR = 1936;
     LASTYEAR = 2031;

     LunarCal = [
      new tagLunarCal(2332171001001101110 ), /* 1936 */ 
      new tagLunarCal( 4104231001001011101 ), 
      new tagLunarCal( 3075281100100101101 ), 
      new tagLunarCal( 4906331100100101011 ), 
      new tagLunarCal( 3800381101010010101 ), /* 1940 */ 
      new tagLunarCal( 2662441101101001010 ), 
      new tagLunarCal( 4503491011010101010 ), 
      new tagLunarCal( 3504540101011010101 ), 
      new tagLunarCal( 2445591010101011011 ), /* 1944 */ 
      new tagLunarCal( 430050010010111011 ), 
      new tagLunarCal( 3201101001001011011 ), 
      new tagLunarCal( 2122151100100101011 ), 
      new tagLunarCal( 4003201010100101011 ), /* 1948 */ 
      new tagLunarCal( 2875261011010010101 ), 
      new tagLunarCal( 4706310110110010101 ), 
      new tagLunarCal( 3600361011010101010 ), 
      new tagLunarCal( 2651410101010110101 ), /* 1952 */ 
      new tagLunarCal( 4403470100110110101 ), 
      new tagLunarCal( 3304521010010110110 ), 
      new tagLunarCal( 2335570101001010111 ), 
      new tagLunarCal( 420620101001010111 ), /* 1956 */ 
      new tagLunarCal( 308181010100101010 ), 
      new tagLunarCal( 4802131110100101010 ), 
      new tagLunarCal( 3803180110101010101 ), 
      new tagLunarCal( 2764231010110101010 ), /* 1960 */ 
      new tagLunarCal( 4506291010101101010 ), 
      new tagLunarCal( 3500340100101101101 ), 
      new tagLunarCal( 2441391010010101110 ), 
      new tagLunarCal( 4302441010010101110 ), /* 1964 */ 
      new tagLunarCal( 3204500101001001101 ), 
      new tagLunarCal( 2035551110100100110 ), 
      new tagLunarCal( 390601101100101010 ), 
      new tagLunarCal( 297050101101010101 ), /* 1968 */ 
      new tagLunarCal( 4702110101011010101 ), 
      new tagLunarCal( 3603161001011011010 ), 
      new tagLunarCal( 2654210100101011101 ), 
      new tagLunarCal( 4505260100101011011 ), /* 1972 */ 
      new tagLunarCal( 3300321010010011011 ), 
      new tagLunarCal( 2241371101001001101 ), 
      new tagLunarCal( 4102421101001001011 ), 
      new tagLunarCal( 3083471101010100101 ), /* 1976 */ 
      new tagLunarCal( 4805531011010101001 ), 
      new tagLunarCal( 3706581011011010101 ), 
      new tagLunarCal( 276031001011011010 ), 
      new tagLunarCal( 460181001010110110 ), /* 1980 */ 
      new tagLunarCal( 3503140100100110111 ), 
      new tagLunarCal( 2444191010010010111 ), 
      new tagLunarCal( 4305241010010010111 ), 
      new tagLunarCal( 32106291011001001011 ), /* 1984 */ 
      new tagLunarCal( 5001350110101001010 ), 
      new tagLunarCal( 3902400110110101001 ), 
      new tagLunarCal( 2863451010110110100 ), 
      new tagLunarCal( 4704501010101101101 ), /* 1988 */ 
      new tagLunarCal( 3606561001001101110 ), 
      new tagLunarCal( 265010100100101111 ), 
      new tagLunarCal( 450160100100101110 ), 
      new tagLunarCal( 3402110110010010110 ), /* 1992 */ 
      new tagLunarCal( 2234170110101001010 ), 
      new tagLunarCal( 4005221110101001010 ), 
      new tagLunarCal( 3086270110101100101 ), 
      new tagLunarCal( 4900320101101011001 ), /* 1996 */ 
      new tagLunarCal( 3702381010101101101 ), 
      new tagLunarCal( 2753431001001101101 ), 
      new tagLunarCal( 46,  04481001001011101 ), /* 1999 */
      new tagLunarCal( 35,  05531100100101101 ), /* 2000 */
      new tagLunarCal( 23,  40591101010010101 ),
      new tagLunarCal( 42,  01,  41101010010101 ),
      new tagLunarCal( 31,  02,  91101101001010 ),
      new tagLunarCal( 21,  23140101101010101 ), /* 2004 */
      new tagLunarCal( 39,  05200101011010101 ),
      new tagLunarCal( 28,  76251010101011011 ),
      new tagLunarCal( 48,  00300010010111011 ),
      new tagLunarCal( 37,  01351001001011011 ), /* 2008 */
      new tagLunarCal( 25,  53411100100101011 ),
      new tagLunarCal( 44,  04461010100101011 ),
      new tagLunarCal( 33,  05511011010010101 ),
      new tagLunarCal( 22,  46561011010101010 ), /* 2012 */
      new tagLunarCal( 40,  01,  21011010101010 ),
      new tagLunarCal( 30,  92,  70101010110101 ),
      new tagLunarCal( 49,  03120100101110101 ),
      new tagLunarCal( 38,  04171010010110110 ), /* 2016 */
      new tagLunarCal( 27,  66230101001010111 ),
      new tagLunarCal( 46,  00280101001010110 ),
      new tagLunarCal( 35,  01330110100100110 ),
      new tagLunarCal( 24,  42380111010010101 ), /* 2020 */
      new tagLunarCal( 42,  04440110101010101 ),
      new tagLunarCal( 31,  05491010110101010 ),
      new tagLunarCal( 21,  26540101010110101 ),
      new tagLunarCal( 40,  00590100101101101 ), /* 2024 */
      new tagLunarCal( 28,  62,  51010010101110 ),
      new tagLunarCal( 47,  03101010010011101 ),
      new tagLunarCal( 36,  04151101001001101 ),
      new tagLunarCal( 25,  55201110100100110 ), /* 2028 */
      new tagLunarCal( 43,  00261101010100101 ),
      new tagLunarCal( 32,  01311101101010100 ),
      new tagLunarCal( 22,  32360110101101010 ) ];


     /* 西曆年每月之日數 */
     SolarCal = [ 312831303130313130313031 ];

     /* 西曆年每月之累積日數, 平年與閏年 */
     SolarDays = [
      0315990120151181212243273304334365396,
      0316091121152182213244274305335366397 ];

     AnimalIdx = ["馬 ""羊 ""猴 ""雞 ""狗 ""豬 ""鼠 ""牛 ""虎 ""兔 ""龍 ""蛇 " ];
     LocationIdx = [ """""""西" ];
     
     
    if (M==0) {  //阳历到阴历
    if (!IsInteger(form_jisuan.yyear.value) || !IsInteger(form_jisuan.ymonth.value) || !IsInteger(form_jisuan.yday.value)) return alert("请输入合法阳历年月日数值");   
     SolarYear = parseInt(form_jisuan.yyear.value);
     SolarMonth = parseInt(form_jisuan.ymonth.value);
     SolarDate = parseInt(form_jisuan.yday.value);


     if ( SolarYear <= FIRSTYEAR || SolarYear > LASTYEAR ) return alert("请输入1936-2031有效年份"); 

     sm = SolarMonth - 1;
     
     if ( sm < 0 || sm > 11 ) return alert("请输入有效月份");
     
     leap = GetLeap( SolarYear );

     if ( sm == 1 )
      d = leap + 28;
     else
      d = SolarCal[sm];

     if ( SolarDate < 1 || SolarDate > d ) return 3;

     y = SolarYear - FIRSTYEAR;
     acc = SolarDays[ leap*14 + sm ] + SolarDate;
     kc = acc + LunarCal[y].BaseKanChih;
     Kan = kc % 10;
     Chih = kc % 12;
     Location = LocationIdx[kc % 4];
     Age = kc % 60;
     if ( Age < 22 )
      Age = 22 - Age;
     else
      Age = 82 - Age;

     Age =Age + 3;

    if (Age < 10)
      Age=Age+60;

     Animal = AnimalIdx[ Chih ];

     if ( acc <= LunarCal[y].BaseDays ) {
      y--;
      LunarYear = SolarYear - 1;
      leap = GetLeap( LunarYear );
      sm += 12;
      acc = SolarDays[leap*14 + sm] + SolarDate;
      }
     else
      LunarYear = SolarYear;
      
     l1 = LunarCal[y].BaseDays;
     for ( i=0; i<13; i++ ) {
      l2 = l1 + LunarCal[y].MonthDays[i] + 29;
      if ( acc <= l2 ) break;
      l1 = l2;
      }

     LunarMonth = i + 1;
     LunarDate = acc - l1;
     im = LunarCal[y].Intercalation;

     if ( im != 0 && LunarMonth > im ) {
      LunarMonth--;
      if ( LunarMonth == im ) LunarMonth = -im;
      }

     if ( LunarMonth > 12 ) LunarMonth -= 12;

        //alert("农历/阴历日期为:"+ LunarYear + "年" + LunarMonth + "月" + LunarDate + "日" );

        var showgn = 0;
        showgn = "农历(阴历)日期为:"+ LunarYear + "" + LunarMonth + "" + LunarDate + "";
        document.form_jisuan.g2n.value=showgn;
                //form_jisuan.yyear.value = "";
                
    //form_jisuan.ymonth.value = "";
                
    //form_jisuan.yday.value = ""; 
     return 0;
     }

     else /* 阴历转阳历 */ 
     { 
       if (!IsInteger(form_jisuan.nyear.value) || !IsInteger(form_jisuan.nmonth.value) || !IsInteger(form_jisuan.nday.value)) return alert("请输入合法农历年月日数值");   
       LunarYear = parseInt(form_jisuan.nyear.value);
       LunarMonth = parseInt(form_jisuan.nmonth.value);
       LunarDate = parseInt(form_jisuan.nday.value);

            if ( LunarYear < FIRSTYEAR || LunarYear >= LASTYEAR ) return alert("请输入1936-2031有效年份");   
              
            y = LunarYear - FIRSTYEAR ; 
            im = LunarCal[y].Intercalation; 
            lm = LunarMonth; 
              
            if ( lm < 0 ) 
            { 
                if ( lm != -im ) 
                    return alert("请输入有效月份");   
            } 
            else if ( lm < 1 || lm > 12 ) return alert("请输入有效月份");   
            
            if ( im != 0 ) 
            { 
                if ( lm > im ) 
                    lm++; 
                else if ( lm == -im ) 
                    lm = im + 1
            } 
            lm--; 

            if ( LunarDate > LunarCal[y].MonthDays[lm] + 29 ) 
                return alert("农历日期不正确");
               
            
            acc = 0;
            for ( i=0; i < lm;i++) {

             acc+= LunarCal[y].MonthDays[i] + 29;
              
             
           }
           
            acc +=LunarCal[y].BaseDays + LunarDate;
               
            
                 
                leap = GetLeap( LunarYear ); 
                
                
            for ( i=13; i>=0; i-- ) {
            
                if ( acc > SolarDays[leap*14+i] ) 
                    break
            }       
                 SolarDate = acc - SolarDays[leap*14 + i]  ;
                
                
               
                if ( i <= 11 ) 
                { 
                  
                    SolarYear = LunarYear; 
                    SolarMonth = i + 1
                } 
                else 
                { 
                    
                    SolarYear = LunarYear + 1
                    SolarMonth = i - 11
                } 
                 
             
                leap = GetLeap( SolarYear ); 
                y = SolarYear - FIRSTYEAR; 
                
                //acc = SolarDays[leap][SolarMonth-1] + SolarDate; 
                acc = SolarDays[leap*14 + SolarMonth-1] + SolarDate;
                
                weekday = ( acc + LunarCal[y].BaseWeekday ) % 7
                kc = acc + LunarCal[y].BaseKanChih; 
                kan = kc % 10
                chih = kc % 12
               
                //alert("公历/阳历日期为:"+ SolarYear + "年" + SolarMonth + "月" + SolarDate + "日" );        

        var showng = 0;
        showng = "公历(阳历)日期为:"+ SolarYear + "" + SolarMonth + "" + SolarDate + "";
        document.form_jisuan.n2g.value=showng;
     
                //form_jisuan.nyear.value = "";
                
    //form_jisuan.nmonth.value = "";
                
    //form_jisuan.nday.value = "";            
                return 0;
     }//else结束
     
     }

     /* 闰年, 返回 0 平年, 1 闰年 */
    function GetLeap( year )
     {
       if ( year % 400 == 0 )
         return 1;
       else if ( year % 100 == 0 )
         return 0;
       else if ( year % 4 == 0 )
         return 1;
       else
         return 0;
     }

    function tagLunarCal( d, i, w, k, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13) {
     this.BaseDays = d;         /* 1 月 1 日到正月初一的累计日 */
     this.Intercalation = i;    /* 闰月月份. 0==此年沒有闰月 */
     this.BaseWeekday = w;      /* 此年 1 月 1 日为星期减 1 */
     this.BaseKanChih = k;      /* 此年 1 月 1 日之干支序号减 1 */
     this.MonthDays = [ m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13 ]; /* 此农历年每月之大小, 0==小月(29日), 1==大月(30日) */
    }

    //-->


    <!--
    function OpenWin( url ) { 
     return window.open( url, 'coop''width=320,height=350,toolbar=0,location=0,directories=0,status=0,menuBar=0,scrollBars=0,resizable=1' ); 



    function IsInteger(string ,sign) 
    {  
      var integer; 
      if ((sign!=null) && (sign!='-') && (sign!='+')) 
      { 
       alert('IsInter(string,sign)的参数出错:nsign为null或"-"或"+"'); 
       return false
      } 
      integer = parseInt(string); 
      if (isNaN(integer)) 
      { 
       return false
      } 
      else if (integer.toString().length==string.length) 
      {  
       if ((sign==null) || (sign=='-' && integer<0) || (sign=='+' && integer>0)) 
       { 
         return true
       } 
       else 
         return false;  
      } 
      else 
       return false


    //-->

    调用方式

    <label>请选择阳历日期</label>

    <select size="1" name="yyear" class="select">
    <option value="1937">1937</option><option value="1938">1938</option><option value="1939">1939</option><option value="1940">1940</option><option value="1941">1941</option><option value="1942">1942</option><option value="1943">1943</option><option value="1944">1944</option><option value="1945">1945</option><option value="1946">1946</option><option value="1947">1947</option><option value="1948">1948</option><option value="1949">1949</option><option value="1950">1950</option><option value="1951">1951</option><option value="1952">1952</option><option value="1953">1953</option><option value="1954">1954</option><option value="1955">1955</option><option value="1956">1956</option><option value="1957">1957</option><option value="1958">1958</option><option value="1959">1959</option><option value="1960">1960</option><option value="1961">1961</option><option value="1962">1962</option><option value="1963">1963</option><option value="1964">1964</option><option value="1965">1965</option><option value="1966">1966</option><option value="1967">1967</option><option value="1968">1968</option><option value="1969">1969</option><option value="1970">1970</option><option value="1971">1971</option><option value="1972">1972</option><option value="1973">1973</option><option value="1974">1974</option><option value="1975">1975</option><option value="1976">1976</option><option value="1977">1977</option><option value="1978">1978</option><option value="1979">1979</option><option value="1980">1980</option><option value="1981">1981</option><option value="1982">1982</option><option value="1983">1983</option><option value="1984">1984</option><option value="1985">1985</option><option value="1986">1986</option><option value="1987">1987</option><option value="1988">1988</option><option value="1989">1989</option><option value="1990">1990</option><option value="1991">1991</option><option value="1992">1992</option><option value="1993">1993</option><option value="1994">1994</option><option value="1995">1995</option><option value="1996">1996</option><option value="1997">1997</option><option value="1998">1998</option><option value="1999">1999</option><option value="2000">2000</option><option value="2001">2001</option><option value="2002">2002</option><option value="2003">2003</option><option value="2004">2004</option><option value="2005">2005</option><option value="2006">2006</option><option value="2007">2007</option><option value="2008">2008</option><option value="2009">2009</option><option value="2010">2010</option><option value="2011">2011</option><option value="2012">2012</option><option value="2013">2013</option><option value="2014">2014</option><option value="2015" selected="selected">2015</option><option value="2016">2016</option><option value="2017">2017</option><option value="2018">2018</option><option value="2019">2019</option><option value="2020">2020</option><option value="2021">2021</option><option value="2022">2022</option><option value="2023">2023</option><option value="2024">2024</option><option value="2025">2025</option><option value="2026">2026</option><option value="2027">2027</option><option value="2028">2028</option><option value="2029">2029</option><option value="2030">2030</option></select>年

    <select size="1" name="ymonth" class="select">
    <option value="1">1</option><option value="2">2</option><option value="3">3</option><option value="4">4</option><option value="5">5</option><option value="6">6</option><option value="7">7</option><option value="8">8</option><option value="9">9</option><option value="10">10</option><option value="11">11</option><option value="12">12</option></select>月

    <select size="1" name="yday" class="select">
    <option value="1">1</option><option value="2">2</option><option value="3">3</option><option value="4">4</option><option value="5">5</option><option value="6">6</option><option value="7">7</option><option value="8">8</option><option value="9">9</option><option value="10">10</option><option value="11">11</option><option value="12">12</option><option value="13">13</option><option value="14">14</option><option value="15">15</option><option value="16">16</option><option value="17">17</option><option value="18">18</option><option value="19">19</option><option value="20" selected="selected">20</option><option value="21">21</option><option value="22">22</option><option value="23">23</option><option value="24">24</option><option value="25">25</option><option value="26">26</option><option value="27">27</option><option value="28">28</option><option value="29">29</option><option value="30">30</option><option value="31">31</option></select> 日

    <input onclick="CalConv(0)" class="button" type="button" value="阳历转阴历">
  • 相关阅读:
    如何做好不擅长的测试任务
    [ Python入门教程 ] Python中日志记录模块logging使用实例
    [ Python入门教程 ] Python中日期时间datetime模块使用实例
    cmd命令行窗口和文件目录资源管理器快速切换
    [ Python入门教程 ] Python中JSON模块基本使用方法
    [ PyQt入门教程 ] PyQt5中多线程模块QThread使用方法
    [ PyQt入门教程 ] PyQt5中数据表格控件QTableWidget使用方法
    设计模式目录
    我的软考架构师之路:目录(共22篇)
    算法篇:目录
  • 原文地址:https://www.cnblogs.com/cf924823/p/5150914.html
Copyright © 2011-2022 走看看