<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    我的Blog我做主^_^

    走向一條通往JAVA的不歸路...

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      64 隨筆 :: 68 文章 :: 77 評論 :: 0 Trackbacks
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <html>
    ?<head>
    ? <title>公歷轉換農歷日期的代碼</title>
    ? <script language="javascript">
    <!--
    // 數組LunarDaysOfMonth存入農歷2001年到2050年每年中的月天數信息
    // 農歷每月只能是29或30天,一年用12(或13)個二進制位表示,從高到低,對應位為1表示30天,否則29天
    var LunarDaysOfMonth = new Array
    (
    ??? 0xd4a8, 0xd4a0, 0xda50, 0x5aa8, 0x56a0, 0xaad8, 0x25d0, 0x92d0, 0xc958, 0xa950, // 2001-2010
    ??? 0xb4a0, 0xb550, 0xb550, 0x55a8, 0x4ba0, 0xa5b0, 0x52b8, 0x52b0, 0xa930, 0x74a8, // 2011-2020
    ??? 0x6aa0, 0xad50, 0x4da8, 0x4b60, 0x9570, 0xa4e0, 0xd260, 0xe930, 0xd530, 0x5aa0, // 2021-2030
    ??? 0x6b50, 0x96d0, 0x4ae8, 0x4ad0, 0xa4d0, 0xd258, 0xd250, 0xd520, 0xdaa0, 0xb5a0, // 2031-2040
    ??? 0x56d0, 0x4ad8, 0x49b0, 0xa4b8, 0xa4b0, 0xaa50, 0xb528, 0x6d20, 0xada0, 0x55b0? // 2041-2050
    );
    ?
    // 數組LunarLeapYear存放農歷2001年到2050年閏月的月份,如沒有則為0,從高到低,每字節存兩年
    var LunarLeapYear = new Array
    (
    ??? 0x40, 0x02, 0x07, 0x00, 0x50, // 2001-2010
    ??? 0x04, 0x09, 0x00, 0x60, 0x04, // 2011-2020
    ??? 0x00, 0x20, 0x60, 0x05, 0x00, // 2021-2030
    ??? 0x30, 0xb0, 0x06, 0x00, 0x50, // 2031-2040
    ??? 0x02, 0x07, 0x00, 0x50, 0x03? // 2041-2050
    );
    ?
    ?
    // 返回農歷iLunarYear年的閏月月份,如沒有則返回0
    function GetLeapMonth(iLunarYear)
    {
    ??? var Leap = LunarLeapYear[(iLunarYear - 2001) >> 1];
    ??? return (((iLunarYear - 2001) & 1) == 0) ? (Leap >> 4) : (Leap & 0x0f);
    }
    ?
    // 返回農歷iLunarYer年iLunarMonth月的天數,結果是一個長整數
    // 如果iLunarMonth不是閏月, 高字為0,低字為該月的天數
    // 如果iLunarMonth是閏月, 高字為后一個月的天數,低字為前一個月的天數
    function LunarMonthDays(iLunarYear, iLunarMonth)
    {
    ??? var High;
    ??? var Low;
    ??? var Bit;
    ?
    ??? High = 0;
    ??? Low = 29;
    ??? Bit = 16 - iLunarMonth;
    ??? if ((iLunarMonth > GetLeapMonth(iLunarYear)) && (GetLeapMonth(iLunarYear) > 0))? Bit--;
    ??? if ((LunarDaysOfMonth[iLunarYear - 2001] & (1 << Bit)) > 0)? Low++;
    ??? if (iLunarMonth == GetLeapMonth(iLunarYear))
    ??? {
    ??????? High = ((LunarDaysOfMonth[iLunarYear - 2001] & (1 << (Bit-1))) > 0) ?? 30 : 29;
    ??? }
    ?
    ??? return Low + (High << 16);
    }
    ?
    // 返回農歷iLunarYear年的總天數
    function LunarYearDays(iLunarYear)
    {
    ??? var Days;
    ??? var tmp;
    ?
    ??? Days = 0;
    ??? for (var i=1; i <= 12; i++)
    ??? {
    ??????? tmp = LunarMonthDays(iLunarYear, i);
    ??????? Days = Days + ((tmp >> 16) & 0xffff); //取高位
    ??????? Days = Days + (tmp & 0xffff); //取低位
    ??? }
    ?
    ??? return Days;
    }
    ?
    // 將農歷iLunarYear年格式化成天干地支記年法表示的字符串
    function FormatLunarYear(iLunarYear)
    {
    ??? var szText1 = new String("甲乙丙丁戊己庚辛壬癸");
    ??? var szText2 = new String("子丑寅卯辰巳午未申酉戌亥");
    ??? var strYear;
    ?
    ??? strYear = szText1.substr((iLunarYear - 4) % 10, 1);
    ??? strYear = strYear + szText2.substr((iLunarYear - 4) % 12, 1);
    ?
    ??? return strYear + "年";
    }
    ?
    // 將農歷iLunarMonth月格式化成農歷表示的字符串
    function FormatLunarMonth(iLunarMonth)
    {
    ??? var szText = new String("正二三四五六七八九十");
    ??? var strMonth;
    ?
    ??? if (iLunarMonth <= 10)
    ??? {
    ??????? strMonth = szText.substr(iLunarMonth - 1, 1);
    ??? }
    ??? else if (iLunarMonth == 11) strMonth = "十一";
    ??? else strMonth = "十二";
    ?
    ??? return strMonth + "月";
    }
    ?
    // 將農歷iLunarDay日格式化成農歷表示的字符串
    function FormatLunarDay(iLunarDay)
    {
    ??? var szText1 = new String("初十廿三");
    ??? var szText2 = new String("一二三四五六七八九十");
    ??? var strDay;
    ??? if ((iLunarDay != 20) && (iLunarDay != 30))
    ??? {
    ??????? strDay = szText1.substr((iLunarDay - 1) / 10, 1) + szText2.substr((iLunarDay - 1) % 10, 1);
    ??? }
    ??? else if (iLunarDay != 20)
    ??? {
    ??????? strDay = szText1.substr(iLunarDay / 10, 1) + "十";
    ??? }
    ??? else
    ??? {
    ??????? strDay = "二十";
    ??? }
    ?
    ??? return strDay;
    }
    ?
    // 將公歷日期轉換為農歷日期,返回農歷表示的字符串
    function GetLunarDateString(SolarDate)
    {
    ??? var tmp;
    ??? var iLunarYear;
    ??? var iLunarMonth;
    ??? var iLunarDay;
    ??? var Leap = false;
    ??? var MinMilli = 1000 * 60;
    ??? var HrMilli = MinMilli * 60;
    ??? var DyMilli = HrMilli * 24;
    ?
    ??? // 從2001年1月1日算起,給定的公歷日期已經過去的天數
    ??? // 11323是1970年1月1日到2001年1月1日之間的天數,因為Date是從1970年1月1日作為起點的
    ??? var iSpanDays = Math.round(SolarDate.getTime() / DyMilli) - 11323;
    ?
    ??? // 公歷2001年1月24日為農歷2001年正月初一,差23天
    ??? if (iSpanDays < 23)
    ??? {
    ??????? iYear = 2000;
    ??????? iLunarMonth = 12;
    ??????? iLunarDay = iSpanDays + 7;
    ??? }
    ??? else
    ??? {
    ??????? // 從農歷2001年正月初一算起
    ??????? iSpanDays = iSpanDays - 23;
    ??????? iLunarYear = 2001;
    ??????? iLunarMonth = 1;
    ??????? iLunarDay = 1;
    ?
    ??????? // 計算農歷年
    ??????? tmp = LunarYearDays(iLunarYear);
    ??????? while (iSpanDays >= tmp)
    ??????? {
    ??????????? iSpanDays -= tmp;
    ??????????? iLunarYear++;
    ??????????? tmp = LunarYearDays(iLunarYear);
    ??????? }
    ?
    ??????? // 計算農歷月
    ??????? tmp = LunarMonthDays(iLunarYear, iLunarMonth) & 0xffff; //取低字
    ??????? while (iSpanDays >= tmp)
    ??????? {
    ??????????? iSpanDays -= tmp;
    ??????????? if (iLunarMonth == GetLeapMonth(iLunarYear))? // 該年該月閏月
    ??????????? {
    ??????????????? tmp = LunarMonthDays(iLunarYear, iLunarMonth) >> 16; //取高字
    ??????????????? if (iSpanDays < tmp)
    ??????????????? {
    ??????????????????? Leap = (tmp > 0) ? true : false;? // 閏月的后個月?
    ??????????????????? break;
    ??????????????? }
    ??????????????? iSpanDays = iSpanDays - tmp;
    ??????????? }
    ?
    ??????????? iLunarMonth++;
    ??????????? tmp = LunarMonthDays(iLunarYear,iLunarMonth) & 0xffff; //取低字
    ??????? }
    ?
    ??????? // 計算農歷日
    ??????? iLunarDay += iSpanDays;
    ??? }
    ?
    ??? return FormatLunarYear(iLunarYear) + (Leap ? "閏" : "") + FormatLunarMonth(iLunarMonth) + FormatLunarDay(iLunarDay);
    }
    //-->
    </script>
    ?</head>
    ?<body>
    ?<script type="text/javascript">
    // 也可以指定日期 var today= new Date(2006, 5, 18);
    var today= new Date(); // 今天日期
    var str = GetLunarDateString(today);
    document.write("今天是:"+str+"")
    </script>
    ?</body>
    </html>

    posted on 2007-01-31 17:22 java_蟈蟈 閱讀(1246) 評論(0)  編輯  收藏 所屬分類: JAVASCRIPT
    主站蜘蛛池模板: 亚洲综合无码一区二区| 亚洲噜噜噜噜噜影院在线播放| 1区1区3区4区产品亚洲| 亚洲综合在线一区二区三区| 国产va免费精品| 91麻豆最新在线人成免费观看| 亚洲AⅤ视频一区二区三区| 亚洲an天堂an在线观看| 亚洲av永久无码精品网址| 免费无码又爽又刺激网站 | 一级黄色免费大片| 99久在线国内在线播放免费观看| 日产乱码一卡二卡三免费| 亚洲AV综合色区无码另类小说| 亚洲欧美乱色情图片| 久青草视频97国内免费影视| 国产成在线观看免费视频| 亚洲最大AV网站在线观看| 亚洲kkk4444在线观看| 少妇性饥渴无码A区免费| 日本特黄特黄刺激大片免费| 婷婷久久久亚洲欧洲日产国码AV| 最新亚洲人成无码网www电影| 免费A级毛片无码A∨中文字幕下载| 国产一区二区三区免费在线观看| 亚洲日韩中文字幕天堂不卡 | 91精品国产免费| 亚洲精品第一国产综合境外资源 | 相泽南亚洲一区二区在线播放| 人妻丰满熟妇无码区免费| 亚洲国产V高清在线观看| 亚洲一级在线观看| a级毛片100部免费观看| 四虎永久成人免费| 久久精品国产亚洲AV忘忧草18| 精品一卡2卡三卡4卡免费视频 | 尤物永久免费AV无码网站| 亚洲综合网美国十次| 国产在线精品观看免费观看| 日本免费的一级v一片| 亚洲国产成人手机在线电影bd|