• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • 最完美的JS萬年歷(一)

    發表于:2007-06-30來源:作者:點擊數: 標簽:
    !DOCTYPE HTML PUBLIC -//W3C//D TD HTML 4.0 Transitional//EN !-- saved from url=(0031)http://26.28.144.2/wnl.htm -- !-- saved from url=(0049)http://joke.maillist.com.tw/files/08/00080501.htm --HTMLHEADTITLE日歷/TITLE!-- *********************
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <!-- saved from url=(0031)http://26.28.144.2/wnl.htm -->
    <!-- saved from url=(0049)http://joke.maillist.com.tw/files/08/00080501.htm --><HTML><HEAD><TITLE>日歷</TITLE><!-- ********************************************
    看到這個萬年歷的時候,有些感動,做的太好了,在此感謝作者的辛勤勞動
    ----------------------------------愛網無限
    1900-2050年公歷與農歷之日歷程序 (IE版)

    版權所有(c), 任何形式之引用或轉載前請來信告知!!
    歡迎來信互相討論研究與指正誤謬。

    林洵賢(Sean Lin) sean@4u.net 編制
    南巢 leafch@163.net 下載并修改
    Tommy tommy@fun.21cn.com 完善
    梅竹松 sumyou@21cn.com 錦上添花
    *************************************************
    程序最後修正:

    2001-8-22
    - 南巢、Tommy 將民國計年改成建國計年。并美化界面
    - 梅竹松 增加一系列節日、活動日

    2001-8-22
    - 修正不同語系的 Windows 造成農歷無法計算
       (此錯誤為微軟 Bug, 感謝 Stanley Tsai 協助測試)
    - 統一日期時間格式為控制臺的區域語系所設定之設格式

    2000-8-4
    - 修正不同語系的 Windows 造成農歷無法計算
       (此錯誤為微軟 Bug, 感謝 Stanley Tsai 協助測試)
    - 統一日期時間格式為控制臺的區域語系所設定之設格式

    2000-8-1
    - 修正某些時區日光節約時間自動調整
    - 修正選擇時區畫面跳動問題
    - 新增時區移至地圖中央
    - 新增詳細日期資料透明及陰影呈現

    2000-7-23
    - 日歷全部改為 Javascript 重寫
    - 修正若公歷同月跨三個農歷月,節日排錯問題
    - 新增顯示詳細日期資料
    - 修正亞歷桑那州夏令時間問題

    ************************************************** -->
    <META
    content="農歷; 公歷; 日歷; 節日; 時區; 節氣; 八字; 干支; 生肖; gregorian solar; chinese lunar; calendar;"
    name=keywords>
    <META content=All name=robots>
    <META content="gregorian solar calendar and chinese lunar calendar"
    name=description>
    <META content="text/html; charset=gb2312" http-equiv=Content-Type>
    <SCRIPT language=JavaScript>
    <!--
    /*****************************************************************************
                                       日期資料
    *****************************************************************************/

    var lunarInfo=new Array(
    0x04bd8,0x04ae0,0x0a570,0x054d5,0x0d260,0x0d950,0x16554,0x056a0,0x09ad0,0x055d2,
    0x04ae0,0x0a5b6,0x0a4d0,0x0d250,0x1d255,0x0b540,0x0d6a0,0x0ada2,0x095b0,0x14977,
    0x04970,0x0a4b0,0x0b4b5,0x06a50,0x06d40,0x1ab54,0x02b60,0x09570,0x052f2,0x04970,
    0x06566,0x0d4a0,0x0ea50,0x06e95,0x05ad0,0x02b60,0x186e3,0x092e0,0x1c8d7,0x0c950,
    0x0d4a0,0x1d8a6,0x0b550,0x056a0,0x1a5b4,0x025d0,0x092d0,0x0d2b2,0x0a950,0x0b557,
    0x06ca0,0x0b550,0x15355,0x04da0,0x0a5d0,0x14573,0x052d0,0x0a9a8,0x0e950,0x06aa0,
    0x0aea6,0x0ab50,0x04b60,0x0aae4,0x0a570,0x05260,0x0f263,0x0d950,0x05b57,0x056a0,
    0x096d0,0x04dd5,0x04ad0,0x0a4d0,0x0d4d4,0x0d250,0x0d558,0x0b540,0x0b5a0,0x195a6,
    0x095b0,0x049b0,0x0a974,0x0a4b0,0x0b27a,0x06a50,0x06d40,0x0af46,0x0ab60,0x09570,
    0x04af5,0x04970,0x064b0,0x074a3,0x0ea50,0x06b58,0x055c0,0x0ab60,0x096d5,0x092e0,
    0x0c960,0x0d954,0x0d4a0,0x0da50,0x07552,0x056a0,0x0abb7,0x025d0,0x092d0,0x0cab5,
    0x0a950,0x0b4a0,0x0baa4,0x0ad50,0x055d9,0x04ba0,0x0a5b0,0x15176,0x052b0,0x0a930,
    0x07954,0x06aa0,0x0ad50,0x05b52,0x04b60,0x0a6e6,0x0a4e0,0x0d260,0x0ea65,0x0d530,
    0x05aa0,0x076a3,0x096d0,0x04bd7,0x04ad0,0x0a4d0,0x1d0b6,0x0d250,0x0d520,0x0dd45,
    0x0b5a0,0x056d0,0x055b2,0x049b0,0x0a577,0x0a4b0,0x0aa50,0x1b255,0x06d20,0x0ada0,
    0x14b63);

    var solarMonth=new Array(31,28,31,30,31,30,31,31,30,31,30,31);
    var Gan=new Array("甲","乙","丙","丁","戊","己","庚","辛","壬","癸");
    var Zhi=new Array("子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥");
    var Animals=new Array("鼠","牛","虎","兔","龍","蛇","馬","羊","猴","雞","狗","豬");
    var solarTerm = new Array("小寒","大寒","立春","雨水","驚蟄","春分","清明","谷雨","立夏","小滿","芒種","夏至","小暑","大暑","立秋","處暑","白露","秋分","寒露","霜降","立冬","小雪","大雪","冬至");
    var sTermInfo = new Array(0,21208,42467,63836,85337,107014,128867,150921,173149,195551,218072,240693,263343,285989,308563,331033,353350,375494,397447,419210,440795,462224,483532,504758);
    var nStr1 = new Array(@#日@#,@#一@#,@#二@#,@#三@#,@#四@#,@#五@#,@#六@#,@#七@#,@#八@#,@#九@#,@#十@#);
    var nStr2 = new Array(@#初@#,@#十@#,@#廿@#,@#卅@#,@# @#);
    var monthName = new Array("JAN","FEB","MAR","APR","MAY","JUN","JUL","AUG","SEP","OCT","NOV","DEC");

    //公歷節日 *表示放假日
    var sFtv = new Array(
    "0101*新年元旦",
    "0202 世界濕地日",
    "0210 國際氣象節",
    "0214 情人節",
    "0303 全國愛耳日",
    "0308 婦女節",
    "0314 國際警察日",
    "0315 國際消費者權益日",
    "0321 世界森林日",
    "0321 世界兒歌日",
    "0322 世界水日",
    "0323 世界氣象日",
    "0324 世界防治結核病日",
    "0330 Tommy 生日^^",
    "0312 植樹節",
    "0401 愚人節",
    "0407 世界衛生日",
    "0422 世界地球日",
    "0501 國際勞動節",
    "0504 中國青年節",
    "0505 碘缺乏病防治日",
    "0508 世界紅十字日",
    "0512 國際護士節",
    "0515 國際家庭日",
    "0517 世界電信日",
    "0518 國際博物館日",
    "0520 全國學生營養日",
    "0523 國際牛奶日",
    "0531 世界無煙日",
    "0601 國際兒童節",
    "0605 世界環境日",
    "0606 全國愛眼日",
    "0617 防治荒漠化和干旱日",
    "0623 國際奧林匹克日",
    "0625 全國土地日",
    "0626 國際反毒品日",
    "0701 建黨日",
    "0707 中國人民抗日戰爭紀念日",
    "0711 世界人口日",
    "0801 建軍節",
    "0908 國際掃盲日",
    "0910 教師節",
    "0914 梅竹松 生日^o^",
    "0916 國際臭氧層保護日",
    "0920 國際愛牙日",
    "0927 世界旅游日",
    "1001*國慶節",
    "1001 國際音樂日",
    "1004 世界動物日",
    "1008 全國高血壓日",
    "1008 世界視覺日",
    "1009 世界郵政日",
    "1015 國際盲人節",
    "1016 世界糧食日",
    "1017 世界消除貧困日",
    "1024 聯合國日",
    "1108 中國記者日",
    "1109 消防宣傳日",
    "1114 世界糖尿病日",
    "1117 國際大學生節",
    "1201 世界艾滋病日",
    "1203 世界殘疾人日",
    "1209 世界足球日",
    "1229 國際生物多樣性日");

    //農歷節日 *表示放假日
    var lFtv = new Array(
    "0101*春節",
    "0115 元宵節",
    "0323 媽祖生辰 (天上圣母誕辰)",
    "0505 端午節",
    "0707 七七情人節",
    "0815*中秋節",
    "0909 重陽節",
    "1208 臘八節",
    "0100*除夕");

    //某月的第幾個星期幾
    var wFtv = new Array(
    "0520 國際母親節",
    "0530 全國助殘日",
    "0630 父親節國際母親節",
    "0911 勞動節",
    "0932 國際和平日",
    "0940 國際聾人節",
    "1011 國際住房日",
    "1013 國際減輕自然災害日",
    "1144 感恩節");


    /*****************************************************************************
                                          日期計算
    *****************************************************************************/

    //====================================== 傳回農歷 y年的總天數
    function lYearDays(y) {
       var i, sum = 348;
       for(i=0x8000; i>0x8; i>>=1) sum += (lunarInfo[y-1900] & i)? 1: 0;
       return(sum+leapDays(y));
    }

    //====================================== 傳回農歷 y年閏月的天數
    function leapDays(y) {
       if(leapMonth(y))  return((lunarInfo[y-1900] & 0x10000)? 30: 29);
       else return(0);
    }

    //====================================== 傳回農歷 y年閏哪個月 1-12 , 沒閏傳回 0
    function leapMonth(y) {
       return(lunarInfo[y-1900] & 0xf);
    }

    //====================================== 傳回農歷 y年m月的總天數
    function monthDays(y,m) {
       return( (lunarInfo[y-1900] & (0x10000>>m))? 30: 29 );
    }

    //====================================== 算出農歷, 傳入日期物件, 傳回農歷日期物件
    //                                       該物件屬性有 .year .month .day .isLeap .yearCyl .dayCyl .monCyl
    function Lunar(objDate) {

       var i, leap=0, temp=0;
       var offset   = (Date.UTC(objDate.getFullYear(),objDate.getMonth(),objDate.getDate()) - Date.UTC(1900,0,31))/86400000;

       this.dayCyl = offset + 40;
       this.monCyl = 14;

       for(i=1900; i<2050 && offset>0; i++) {
          temp = lYearDays(i);
          offset -= temp;
          this.monCyl += 12;
       }

       if(offset<0) {
          offset += temp;
          i--;
          this.monCyl -= 12;
       }

       this.year = i;
       this.yearCyl = i-1864;

       leap = leapMonth(i); //閏哪個月
       this.isLeap = false;

       for(i=1; i<13 && offset>0; i++) {
          //閏月
          if(leap>0 && i==(leap+1) && this.isLeap==false)
             { --i; this.isLeap = true; temp = leapDays(this.year); }
          else
             { temp = monthDays(this.year, i); }

          //解除閏月
          if(this.isLeap==true && i==(leap+1)) this.isLeap = false;

          offset -= temp;
          if(this.isLeap == false) this.monCyl ++;
       }

       if(offset==0 && leap>0 && i==leap+1)
          if(this.isLeap)
             { this.isLeap = false; }
          else
             { this.isLeap = true; --i; --this.monCyl;}

       if(offset<0){ offset += temp; --i; --this.monCyl; }

       this.month = i;
       this.day = offset + 1;
    }

    //==============================傳回公歷 y年某m+1月的天數
    function solarDays(y,m) {
       if(m==1)
          return(((y%4 == 0) && (y%100 != 0) || (y%400 == 0))? 29: 28);
       else
          return(solarMonth[m]);
    }
    //============================== 傳入 offset 傳回干支, 0=甲子
    function cyclical(num) {
       return(Gan[num%10]+Zhi[num%12]);
    }

    //============================== 日歷屬性
    function calElement(sYear,sMonth,sDay,week,lYear,lMonth,lDay,isLeap,cYear,cMonth,cDay) {

          this.isToday    = false;
          //公歷
          this.sYear      = sYear;
          this.sMonth     = sMonth;
          this.sDay       = sDay;
          this.week       = week;
          //農歷
          this.lYear      = lYear;
          this.lMonth     = lMonth;
          this.lDay       = lDay;
          this.isLeap     = isLeap;
          //干支
          this.cYear      = cYear;
          this.cMonth     = cMonth;
          this.cDay       = cDay;

          this.color      = @#@#;

          this.lunarFestival = @#@#; //農歷節日
          this.solarFestival = @#@#; //公歷節日
          this.solarTerms    = @#@#; //節氣

    }

    //===== 某年的第n個節氣為幾日(從0小寒起算)
    function sTerm(y,n) {
       var offDate = new Date( ( 31556925974.7*(y-1900) + sTermInfo[n]*60000  ) + Date.UTC(1900,0,6,2,5) );
       return(offDate.getUTCDate());
    }

    //============================== 傳回日歷物件 (y年,m+1月)
    function calendar(y,m) {

       var sDObj, lDObj, lY, lM, lD=1, lL, lX=0, tmp1, tmp2;
       var lDPOS = new Array(3);
       var n = 0;
       var firstLM = 0;

       sDObj = new Date(y,m,1,0,0,0,0);    //當月一日日期

       this.length    = solarDays(y,m);    //公歷當月天數
       this.firstWeek = sDObj.getDay();    //公歷當月1日星期幾


       for(var i=0;i<this.length;i++) {

          if(lD>lX) {
             sDObj = new Date(y,m,i+1);    //當月一日日期
             lDObj = new Lunar(sDObj);     //農歷
             lY    = lDObj.year;           //農歷年
             lM    = lDObj.month;          //農歷月
             lD    = lDObj.day;            //農歷日
             lL    = lDObj.isLeap;         //農歷是否閏月
             lX    = lL? leapDays(lY): monthDays(lY,lM); //農歷當月最後一天

             if(n==0) firstLM = lM;
             lDPOS[n++] = i-lD+1;
          }

          //sYear,sMonth,sDay,week,
          //lYear,lMonth,lDay,isLeap,
          //cYear,cMonth,cDay
          this[i] = new calElement(y, m+1, i+1, nStr1[(i+this.firstWeek)%7],
                                   lY, lM, lD++, lL,
                                   cyclical(lDObj.yearCyl) ,cyclical(lDObj.monCyl), cyclical(lDObj.dayCyl++) );

          if((i+this.firstWeek)%7==0)   this[i].color = @#red@#;  //周日顏色
          if((i+this.firstWeek)%14==13) this[i].color = @#red@#;  //周休二日顏色
       }

       //節氣
       tmp1=sTerm(y,m*2  )-1;
       tmp2=sTerm(y,m*2+1)-1;
       this[tmp1].solarTerms = solarTerm[m*2];
       this[tmp2].solarTerms = solarTerm[m*2+1];
       if(m==3) this[tmp1].color = @#red@#; //清明顏色

       //公歷節日
       for(i in sFtv)
          if(sFtv[i].match(/^(\d{2})(\d{2})([\s\*])(.+)$/))
             if(Number(RegExp.$1)==(m+1)) {
                this[Number(RegExp.$2)-1].solarFestival += RegExp.$4 + @# @#;
                if(RegExp.$3==@#*@#) this[Number(RegExp.$2)-1].color = @#red@#;
             }

       //月周節日
       for(i in wFtv)
          if(wFtv[i].match(/^(\d{2})(\d)(\d)([\s\*])(.+)$/))
             if(Number(RegExp.$1)==(m+1)) {
                tmp1=Number(RegExp.$2);
                tmp2=Number(RegExp.$3);
                this[((this.firstWeek>tmp2)?7:0) + 7*(tmp1-1) + tmp2 - this.firstWeek].solarFestival += RegExp.$5 + @# @#;
             }

       //農歷節日
       for(i in lFtv)
          if(lFtv[i].match(/^(\d{2})(.{2})([\s\*])(.+)$/)) {
             tmp1=Number(RegExp.$1)-firstLM;
             if(tmp1==-11) tmp1=1;
             if(tmp1 >=0 && tmp1<n) {
                tmp2 = lDPOS[tmp1] + Number(RegExp.$2) -1;
                if( tmp2 >= 0 && tmp2<this.length) {
                   this[tmp2].lunarFestival += RegExp.$4 + @# @#;
                   if(RegExp.$3==@#*@#) this[tmp2].color = @#red@#;
                }
             }
          }

       if(m==2) this[20].solarFestival = this[20].solarFestival+unescape(@#%20%u6D35%u8CE2%u751F%u65E5@#);

       //黑色星期五
       if((this.firstWeek+12)%7==5)
          this[12].solarFestival += @#黑色星期五@#;

       //今日
       if(y==tY && m==tM) this[tD-1].isToday = true;

    }

    //====================== 中文日期
    function cDay(d){
       var s;

       switch (d) {
          case 10:
             s = @#初十@#; break;
          case 20:
             s = @#二十@#; break;
             break;
          case 30:
             s = @#三十@#; break;
             break;
          default :
             s = nStr2[Math.floor(d/10)];
             s += nStr1[d%10];
       }
       return(s);
    }

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>