此萬年歷程序是在網站找到的………………加一點點改動!供大家參考
第一個文件保存為文件
萬年歷.asp
<html> <head> <title>soul studio中國網絡論壇在線(靈魂工作室)</title> <meta name="generator" content="soul studio"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="content-type" content="text/html; charset=gb2312"> <link rel=stylesheet type="text/css" href="http://www.8asp.com/default<% =session("skin_number")%>.css"> <script LANGUAGE="JavaScript"> function openWindow(theURL,winName,features) { if (winName.window) winName.focus; popupWin = window.open(theURL,winName,features) popupWin.focus; } </script> </head>
<body leftmargin=0 topmargin=0> <TABLE cellpadding=0 cellspacing=0 class='topTD' width='100%'> <tr valign=absmiddle> <td style="{padding:0px;}" width="21%"><A href='default.asp'><img src=http://cfan.net.cn/info/"http://8asp.com/images/img/logo.gif" width=170 height=49 border=0 alt="ASP網絡聯盟(soul studio)" align="absmiddle"></A></td> <td style="{text-align:center;vertical-align:middle;}" width="78%" background="/article/UploadPic/2006719133037660.gif"></td> <td style="{text-align:right;vertical-align:middle;}" width="1%"> </td> </tr> </TABLE> <TABLE cellpadding=0 cellspacing=0 width='100%'> <tr valign=top> <td style="{padding:0px;}"><img src=http://cfan.net.cn/info/"http://8asp.com/images/pix.gif" width=640 height=1 border=0></td> </tr> </TABLE> <p><script language="JavaScript"> <!-- function MM_reloadPage(init) { //reloads the window if Nav4 resized if (init==true) with (navigator) {if ((appName=="Netscape")&&(parseInt(appVersion)==4)) { document.MM_pgW=innerWidth; document.MM_pgH=innerHeight; onresize=MM_reloadPage; }} else if (innerWidth!=document.MM_pgW || innerHeight!=document.MM_pgH) location.reload(); } MM_reloadPage(true);
function MM_findObj(n, d) { //v4.0 var p,i,x; if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) { d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);} if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n]; for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document); if(!x && document.getElementById) x=document.getElementById(n); return x; } function MM_showHideLayers() { //v3.0 var i,p,v,obj,args=MM_showHideLayers.arguments; for (i=0; i<(args.length-2); i+=3) if ((obj=MM_findObj(args[i]))!=null) { v=args[i+2]; if (obj.style) { obj=obj.style; v=(v=='show')?'visible':(v='hide')?'hidden':v; } obj.visibility=v; } }
// --> </script>
<table class='menuTable' > <tr> <td class='menuTD' onmouseover="this.className='menuTDover'" onmouseout="this.className='menuTD'" align="center" width="7%"> <a class=menuFont href="default.asp">主頁</a> </td> <td class='menuTD' onmouseover="MM_showHideLayers('Layer1','','show')" onmouseout="MM_showHideLayers('Layer1','','hide')" align="center" width="10%" > <div id="menu2" style="position:absolute; width:13px; height:15px; z-index:1; visibility: hidden"> <div id="Layer1" style=" Filter:alpha(opacity=85);position:absolute; width:82px; height:80px; z-index:5; left: -29px; top: 11px" onMouseOver="MM_showHideLayers('Layer1','','show')" onMouseOut="MM_showHideLayers('Layer1','','hide')"> <br> <table width="80" border="0" cellspacing="0" cellpadding="0" class='DataTD'> <tr> <td align="center" onmouseover="this.className='top2TD'" onmouseout="this.className='DataTD'" style="{padding:2px}" ><a href='<% =page_name%>?skin_number=0' style='{color:#000000}' >標準頁面</a> </td> </tr> <tr> <td align="center" onmouseover="this.className='top2TD'" onmouseout="this.className='DataTD'" style="{padding:2px}" > <a href='<% =page_name%>?skin_number=1' style='{color:#000000}' >晶瑩紫水晶</a> </td> </tr> <tr> <td align="center" onmouseover="this.className='top2TD'" onmouseout="this.className='DataTD'" style="{padding:2px}" ><a href='<% =page_name%>?skin_number=2' style='{color:#000000}' >青青河邊草</a></td> </tr> <tr> <td align="center" onmouseover="this.className='top2TD'" onmouseout="this.className='DataTD'" style="{padding:2px}" ><a href='<% =page_name%>?skin_number=3' style='{color:#000000}' >頁面三</a> </td> </tr> <tr> <td align="center" onmouseover="this.className='top2TD'" onmouseout="this.className='DataTD'" style="{padding:2px}" ><a href='<% =page_name%>?skin_number=4' style='{color:#000000}' >頁面4</a></td> </tr> </div> </div> <a class=menuFont href="#">風格</a> </td> <td class='menuTD' align="center" width="7%" > <a class=menuFont href="login.asp?action=logout">登陸</a> </td> <td class='menuTD' align="center" width="7%"'> <a class=menuFont href="#">管理</a> </td> <td class='menuTD' align="center" width="7%" > <a class=menuFont href="#">鏈接</a> </td> <td class='menuTD' align="center" width="6%" > <a class=menuFont href="http://8asp.com/forums.asp">論壇</a></td> <td class='menuTD' align="center" width="7%" > <a class=menuFont href="content.asp?contenttypeid=2">文章</a> </td> <td class='menuTD' nowrap align="center" width="17%"> <a class=menuFont href="submit.asp?CatId=<% =request("CatId")%>">網絡論壇聯盟</a> </td> <form action="goto.asp" method="get" > <td class='menuTD' width='32%' style="{text-align:right;}"> <% if isnull(gotourl) then gotourl = ""%> <% if session("accesslevel") >= 3 then%> <% elseif session("accesslevel") = 2 then%> <% else%> <% =now%> <% end if%> </td> </form> </tr> </p> <p> <script type='text/javascript' src='萬年歷.js'></script> <STYLE>.todyaColor { BACKGROUND-COLOR: aqua } </STYLE> </p> <META content="MSHTML 5.50.4522.1800" name=GENERATOR></HEAD> <BODY onload=initialize() onunload=terminate()> <p> </p> <p> <SCRIPT language=JavaScript><!-- if(navigator.appName == "Netscape" || parseInt(navigator.appVersion) < 4) document.write("<h1>你的瀏覽器無法執行此程序。</h1>此程序需在 IE4 以后的版本才能執行!!") //--></SCRIPT> </p> <DIV id=detail style="Z-INDEX: 3; FILTER: shadow(color=#333333,direction=135); WIDTH: 140px; POSITION: absolute; HEIGHT: 120px"></DIV> <CENTER> <TABLE border=0> <TBODY> <TR><!------------------------------ 世界時間 -----------------------------------> <FORM name=WorldClock> <TD vAlign=top align=middle width=240><FONT style="FONT-SIZE: 9pt" size=2>本地時間</FONT><BR><SPAN id=LocalTime style="FONT-SIZE: 11pt; COLOR: #000080; FONT-FAMILY: Arial">0000年0月0日( )午 00:00:00</SPAN> <P><SPAN id=City style="FONT-SIZE: 9pt; WIDTH: 150px; FONT-FAMILY: '新宋體'">中國</SPAN> <BR><SPAN id=GlobeTime style="FONT-SIZE: 11pt; COLOR: #000080; FONT-FAMILY: Arial">0000年0月0日( )午 00:00:00</SPAN><BR> <TABLE style="FONT-SIZE: 10pt; FONT-FAMILY: Wingdings"> <TBODY> <TR> <TD align=middle>Ú <DIV id=map style="FILTER: Light; OVERFLOW: hidden; WIDTH: 240px; HEIGHT: 120px; BACKGROUND-COLOR: mediumblue"><FONT id=world style="FONT-SIZE: 185px; LEFT: 0px; COLOR: green; FONT-FAMILY: Webdings; POSITION: relative; TOP: -26px"></FONT> </DIV>Ù</TD></TR></TBODY></TABLE><BR><SELECT style="FONT: 9pt '宋體'; WIDTH: 240px; BACKGROUND-COLOR: #e0e0ff" onchange=chContinent() name=continentMenu></SELECT><BR><SELECT style="FONT: 9pt '宋體'; WIDTH: 240px; BACKGROUND-COLOR: #e0e0ff" onchange=chCountry() name=countryMenu></SELECT> </TD> </FORM><!------------------------------ 萬年歷 -----------------------------------> <FORM name=CLD> <TD align=middle> <DIV style="Z-INDEX: -1; POSITION: absolute; TOP: 108px; left: 168px"><FONT id=YMBG style="FONT-SIZE: 100pt; COLOR: #f0f0f0; FONT-FAMILY: 'Arial Black'"> 0000<BR> JUN</FONT> </DIV> <TABLE border=0> <TBODY> <TR> <TD bgColor=#000080 colSpan=7><FONT style="FONT-SIZE: 9pt" color=#ffffff size=2>公元<SELECT style="FONT-SIZE: 9pt" onchange=changeCld() name=SY> <SCRIPT language=JavaScript><!-- for(i=1900;i<2101;i++) document.write('<option>'+i) //--></SCRIPT> </SELECT>年<SELECT style="FONT-SIZE: 9pt" onchange=changeCld() name=SM> <SCRIPT language=JavaScript><!-- for(i=1;i<13;i++) document.write('<option>'+i) //--></SCRIPT> </SELECT>月</FONT> <FONT id=GZ face=標楷體 color=#ffffff size=4></FONT><BR></TD></TR> <TR align=middle bgColor=#e0e0e0> <TD width=54>日</TD> <TD width=54>一</TD> <TD width=54>二</TD> <TD width=50>三</TD> <TD width=54>四</TD> <TD width=54>五</TD> <TD width=54>六</TD></TR> <SCRIPT language=JavaScript><!-- var gNum, color1, color2;
// 星期六顏色 switch (conWeekend) { case 1: color1 = 'black'; color2 = color1; break; case 2: color1 = 'green'; color2 = color1; break; case 3: color1 = 'red'; color2 = color1; break; default : color1 = 'green'; color2 = 'red'; }
for(i=0;i<6;i++) { document.write('<tr align=center>') for(j=0;j<7;j++) { gNum = i*7+j document.write('<td id="GD' + gNum +'" onMouseOver="mOvr(' + gNum +')" onMouseOut="mOut()"><font id="SD' + gNum +'" size=5 face="Arial Black"') if(j == 0) document.write(' color=red') if(j == 6) { if(i%2==1) document.write(' color='+color2) else document.write(' color='+color1) } document.write(' TITLE=""> </font><br><font id="LD' + gNum + '" size=2 style="font-size:9pt"> </font></td>') } document.write('</tr>') } //--></SCRIPT> </TBODY></TABLE></TD> <TD vAlign=top align=middle width=40><BR><BR><BR>年<BR><BUTTON style="FONT-SIZE: 9pt" onclick="pushBtm('YD')"><B>↑</B></BUTTON><BR><BUTTON style="FONT-SIZE: 9pt" onclick="pushBtm('YU')"><B>↓</B></BUTTON> <P>月<BR><BUTTON style="FONT-SIZE: 9pt" onclick="pushBtm('MD')"><B>↑</B></BUTTON><BR><BUTTON style="FONT-SIZE: 9pt" onclick="pushBtm('MU')"><B>↓</B></BUTTON> <P><BUTTON style="FONT-SIZE: 9pt" onclick="pushBtm('')">本<BR>月</BUTTON> <P></P></TD></FORM></TR></TBODY></TABLE><FONT style="FONT-SIZE: 9pt" color=#ffffff> </FONT> <div align=center> <p> <p> <script src="http://www.8asp.com/top/Counter.asp?Style=1"></script> <p>廣告服務 | 關于我們 | 版權說明 | 合作伙伴 | 聯系我們 <hr> <p></p> <p>Copyright ©2002-2003本站所有程序由<a href='default.asp' target='_new'>firebird</a><a target='_new'></a> 獨立完成 在線QQ:178622550</p> <p>本站于2002年12月1日正式成立<a href='default.asp' target='_new'>soul studio</a><a target='_new'></a>靈魂工作室,成員(firebird、dodo、程式浪人)</p> </div> <script> document.write("<DIV id=yuzi style='right:16px;POSITION:absolute;TOP:1px;'><a href=http://www.8asp.com/guestbook/ly.asp?username=8asp target=_blank title='【無窗口式留言薄】此個性留言本為可申請版本。采用彈出無邊框窗口;全個性的界面'><img border=0 -src='/article/UploadPic/2006719133039957.gif'></a></div>"); lastScrollY=0; function heartBeat(){ diffY=document.body.scrollTop; percent=.1*(diffY-lastScrollY); if(percent>0)percent=Math.ceil(percent); else percent=Math.floor(percent); document.all.yuzi.style.pixelTop+=percent; lastScrollY=lastScrollY+percent; } window.setInterval("heartBeat()",1); </script> <BR> </CENTER></BODY></HTML> <SCRIPT language=JavaScript> if (document.all) document.body.onmousedown=new Function("if (event.button==2||event.button==3)window.external.addFavorite('http://www.8asp.com','中華網絡聯盟')") </SCRIPT>
將下面保存文件名為如下
萬年歷.js
<!-- /***************************************************************************** ASP網絡聯盟 http://www.8asp.com Soul studio工作室(firebird 、dodo) *****************************************************************************/
var conWeekend = 3; // 周末顏色顯示: 1=黑色, 2=綠色, 3=紅色, 4=隔周休
/***************************************************************************** 日期資料 *****************************************************************************/
var lunarInfo=new Array( 0x4bd8,0x4ae0,0xa570,0x54d5,0xd260,0xd950,0x5554,0x56af,0x9ad0,0x55d2, 0x4ae0,0xa5b6,0xa4d0,0xd250,0xd295,0xb54f,0xd6a0,0xada2,0x95b0,0x4977, 0x497f,0xa4b0,0xb4b5,0x6a50,0x6d40,0xab54,0x2b6f,0x9570,0x52f2,0x4970, 0x6566,0xd4a0,0xea50,0x6a95,0x5adf,0x2b60,0x86e3,0x92ef,0xc8d7,0xc95f, 0xd4a0,0xd8a6,0xb55f,0x56a0,0xa5b4,0x25df,0x92d0,0xd2b2,0xa950,0xb557, 0x6ca0,0xb550,0x5355,0x4daf,0xa5b0,0x4573,0x52bf,0xa9a8,0xe950,0x6aa0, 0xaea6,0xab50,0x4b60,0xaae4,0xa570,0x5260,0xf263,0xd950,0x5b57,0x56a0, 0x96d0,0x4dd5,0x4ad0,0xa4d0,0xd4d4,0xd250,0xd558,0xb540,0xb6a0,0x95a6, 0x95bf,0x49b0,0xa974,0xa4b0,0xb27a,0x6a50,0x6d40,0xaf46,0xab60,0x9570, 0x4af5,0x4970,0x64b0,0x74a3,0xea50,0x6b58,0x5ac0,0xab60,0x96d5,0x92e0, 0xc960,0xd954,0xd4a0,0xda50,0x7552,0x56a0,0xabb7,0x25d0,0x92d0,0xcab5, 0xa950,0xb4a0,0xbaa4,0xad50,0x55d9,0x4ba0,0xa5b0,0x5176,0x52bf,0xa930, 0x7954,0x6aa0,0xad50,0x5b52,0x4b60,0xa6e6,0xa4e0,0xd260,0xea65,0xd530, 0x5aa0,0x76a3,0x96d0,0x4afb,0x4ad0,0xa4d0,0xd0b6,0xd25f,0xd520,0xdd45, 0xb5a0,0x56d0,0x55b2,0x49b0,0xa577,0xa4b0,0xaa50,0xb255,0x6d2f,0xada0, 0x4b63,0x937f,0x49f8,0x4970,0x64b0,0x68a6,0xea5f,0x6b20,0xa6c4,0xaaef, 0x92e0,0xd2e3,0xc960,0xd557,0xd4a0,0xda50,0x5d55,0x56a0,0xa6d0,0x55d4, 0x52d0,0xa9b8,0xa950,0xb4a0,0xb6a6,0xad50,0x55a0,0xaba4,0xa5b0,0x52b0, 0xb273,0x6930,0x7337,0x6aa0,0xad50,0x4b55,0x4b6f,0xa570,0x54e4,0xd260, 0xe968,0xd520,0xdaa0,0x6aa6,0x56df,0x4ae0,0xa9d4,0xa4d0,0xd150,0xf252, 0xd520);
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 世界濕地日", "0207 國際聲援南非日", "0210 國際氣象節", "0214 情人節", "0301 國際海豹日", "0303 全國愛耳日", "0308 國際婦女節", "0312 植樹節 孫中山逝世紀念日", "0314 國際警察日", "0315 國際消費者權益日", "0317 中國國醫節 國際航海日", "0321 世界森林日 消除種族歧視國際日", "0321 世界兒歌日", "0322 世界水日", "0323 世界氣象日", "0324 世界防治結核病日", "0325 全國中小學生安全教育日", "0330 巴勒斯坦國土日", "0401 愚人節 全國愛國衛生運動月(四月) 稅收宣傳月(四月)", "0407 世界衛生日", "0422 世界地球日", "0423 世界圖書和版權日", "0424 亞非新聞工作者日", "0501 國際勞動節", "0504 中國五四青年節", "0505 碘缺乏病防治日", "0508 世界紅十字日", "0512 國際護士節", "0515 國際家庭日", "0517 世界電信日", "0518 國際博物館日", "0520 全國學生營養日", "0523 國際牛奶日", "0531 世界無煙日", "0601 國際兒童節", "0605 世界環境日", "0606 全國愛眼日", "0617 防治荒漠化和干旱日", "0623 國際奧林匹克日", "0625 全國土地日", "0626 國際反毒品日", "0701 中國共產黨建黨日 世界建筑日", "0702 國際體育記者日 精品推介站(http://www.21softs.com/)正式對外開放紀念日", "0707 中國人民抗日戰爭紀念日", "0711 世界人口日", "0730 非洲婦女日", "0801 中國建軍節", "0808 中國男子節(爸爸節)", "0815 日本正式宣布無條件投降日", "0908 國際掃盲日 國際新聞工作者日", "0910 教師節", "0914 世界清潔地球日", "0916 國際臭氧層保護日", "0918 九·一八事變紀念日", "0920 國際愛牙日", "0927 世界旅游日", "1001*國慶節 世界音樂日 國際老人節", "1001 國際音樂日", "1002 國際和平與民主自由斗爭日", "1004 世界動物日", "1008 全國高血壓日", "1008 世界視覺日", "1009 世界郵政日 萬國郵聯日", "1010 辛亥革命紀念日 世界精神衛生日", "1013 世界保健日 國際教師節", "1014 世界標準日", "1015 國際盲人節(白手杖節)", "1016 世界糧食日", "1017 世界消除貧困日", "1022 世界傳統醫藥日", "1024 聯合國日 世界發展信息日", "1031 世界勤儉日", "1107 十月社會主義革命紀念日", "1108 中國記者日", "1109 全國消防安全宣傳教育日", "1110 世界青年節", "1111 國際科學與和平周(本日所屬的一周)", "1112 孫中山誕辰紀念日", "1114 世界糖尿病日", "1117 國際大學生節 世界學生節", "1121 世界問候日 世界電視日", "1129 國際聲援巴勒斯坦人民國際日", "1201 世界艾滋病日", "1203 世界殘疾人日", "1205 國際經濟和社會發展志愿人員日", "1208 國際兒童電視日", "1209 世界足球日", "1210 世界人權日", "1212 西安事變紀念日", "1213 南京大屠殺(1937年)紀念日!緊記血淚史!", "1221 國際籃球日", "1224 平安夜", "1225 圣誕節", "1229 國際生物多樣性日");
//某月的第幾個星期幾。 5,6,7,8 表示到數第 1,2,3,4 個星期幾 var wFtv = new Array( "0110 黑人日", "0150 世界麻風日", //一月的最后一個星期日(月倒數第一個星期日) "0520 國際母親節", "0530 全國助殘日", "0630 父親節", "0911 勞動節", "0932 國際和平日", "0940 國際聾人節 世界兒童日", "0950 世界海事日", "1011 國際住房日", "1013 國際減輕自然災害日(減災日)", "1144 感恩節");
//農歷節日 var lFtv = new Array( "0101*春節", "0115 元宵節", "0202 龍抬頭節", "0323 媽祖生辰 (天上圣母誕辰)", "0505 端午節", "0707 七七中國情人節", "0815 中秋節", "0909 重陽節", "1208 臘八節", "1223 臘八節", "0100*除夕");
//世界時間資料 var timeData = { "Asia 亞洲": { //---------------------------------------------- "Brunei 文萊 ":["+0800","","斯里巴加灣市"], "Burma 緬甸 ":["+0630","","仰光"], "Cambodia 柬埔寨 ":["+0700","","金邊"], "China 中國 ":["+0800","","北京、重慶、上海、天津"], "China(HK,Macau) 中國 ":["+0800","","香港、澳門特區"], "China(TaiWan) 中國 ":["+0800","","臺北、高雄"], "China(Urumchi) 中國 ":["+0700","","烏魯木齊"], "Indonesia 印尼 ":["+0700","","雅加達"], "Japan 日本 ":["+0900","","東京、大阪、札幌"], "Korea 韓國 ":["+0900","","漢城"], "Laos 老撾 ":["+0700","","萬象"], "Malaysia 馬來西亞":["+0800","","吉隆坡"], "Mongolia 蒙古 ":["+0800","03L03|09L03","烏蘭巴托、庫倫"], "Philippines 菲律賓 ":["+0800","04F53|10F53","馬尼拉"], "Russia(Anadyr) 俄羅斯 ":["+1300","03L03|10L03","阿納德爾河"], "Russia(Kamchatka) 俄羅斯 ":["+1200","03L03|10L03","堪察加半島"], "Russia(Magadan) 俄羅斯 ":["+1100","03L03|10L03","馬加丹"], "Russia(Vladivostok)俄羅斯 ":["+1000","03L03|10L03","符拉迪沃斯托克(海參崴)"], "Russia(Yakutsk) 俄羅斯 ":["+0900","03L03|10L03","雅庫茨克"], "Singapore 新加坡 ":["+0800","","新加坡"], "Thailand 泰國 ":["+0700","","曼谷"], "Vietnam 越南 ":["+0700","","河內"] }, "ME, India pen. 中東、印度半島": { //------------------------------------ "Afghanistan 阿富汗 ":["+0430","","喀布爾"], "Arab Emirates 阿拉伯聯合酋長國":["+0400","","阿布扎比"], "Bahrain 巴林 ":["+0300","","麥納麥"], "Bangladesh 孟加拉 ":["+0600","","達卡"], "Bhutan 不丹 ":["+0600","","廷布"], "Cyprus 塞浦路斯":["+0200","","尼科西亞"], "Georgia 喬治亞 ":["+0500","","第比利斯"], "India 印度 ":["+0530","","新德里、孟買、加爾各答"], "Iran 伊朗 ":["+0330","04 13|10 13","德黑蘭"], "Iraq 伊拉克 ":["+0300","04 13|10 13","巴格達"], "Israel 以色列·巴勒斯坦":["+0200","04F53|09F53","耶路撒冷"], "Jordan 約旦 ":["+0200","","安曼"], "Kuwait 科威特 ":["+0300","","科威特城"], "Lebanon 黎巴嫩 ":["+0200","03L03|10L03","貝魯特"], "Maldives 馬爾代夫":["+0500","","馬累"], "Nepal 尼泊爾 ":["+0545","","加德滿都"], "Oman 阿曼 ":["+0400","","馬斯喀特"], "Pakistan 巴基斯坦":["+0500","","卡拉奇、伊斯蘭堡"], "Qatar 卡塔爾 ":["+0300","","多哈"], "Saudi Arabia 沙特阿拉伯":["+0300","","利雅得"], "Sri Lanka 斯里蘭卡":["+0600","","科倫坡"], "Syria 敘利亞 ":["+0200","04 13|10 13","大馬士革"], "Tajikistan 塔吉克斯坦":["+0500","","杜尚別"], "Turkey 土耳其 ":["+0200","","伊斯坦堡"], "Turkmenistan 土庫曼斯坦":["+0500","","阿什哈巴德"], "Uzbekistan 烏茲別克斯坦":["+0500","","塔什干"], "Yemen 也門 ":["+0300","","薩那"] }, "North Europe 北歐": { //---------------------------------------------- "Denmark 丹麥":["+0100","04F03|10L03","哥本哈根"], "Finland 芬蘭":["+0200","03L01|10L01","赫爾辛基"], "Iceland 冰島":["+0000","","雷克雅未克"], "Norwegian 挪威":["+0100","","奧斯陸"], "Sweden 瑞典":["+0100","03L01|10L01","斯德哥爾摩"] }, "Eastern Europe 中歐、東歐": { //---------------------------------------- "Armenia 亞美尼亞":["+0400","","埃里溫"], "Austria 奧地利 ":["+0100","03L01|10L01","維也納"], "Azerbaijan 阿塞拜疆":["+0400","","巴庫"], "Czech 捷克 ":["+0100","","布拉格"], "Estonia 愛沙尼亞":["+0200","","塔林"], "Germany 德國 ":["+0100","03L01|10L01","柏林、波恩"], "Hungarian 匈牙利 ":["+0100","","布達佩斯"], "Kazakhstan(Astana) 哈薩克斯坦":["+0600","","阿斯塔納、阿拉木圖"], "Kazakhstan(Aqtobe) 哈薩克斯坦":["+0500","","阿克托別"], "Kazakhstan(Aqtau) 哈薩克斯坦":["+0400","","阿克圖"], "Kirghizia 吉爾吉斯":["+0500","","比斯凱克"], "Latvia 拉脫維亞":["+0200","","里加"], "Lithuania 立陶宛 ":["+0200","","維爾紐斯"], "Moldova 摩爾多瓦":["+0200","","基希納烏"], "Poland 波蘭 ":["+0100","","華沙"], "Rumania 羅馬尼亞":["+0200","","布加勒斯特"], "Russia(Moscow) 俄羅斯 ":["+0300","03L03|10L03","莫斯科"], "Russia(Volgograd) 俄羅斯 ":["+0300","03L03|10L03","伏爾加格勒"], "Slovakia 斯洛伐克":["+0100","","布拉迪斯拉發"], "Switzerland 瑞士 ":["+0100","","蘇黎世"], "Ukraine 烏克蘭 ":["+0200","","基輔"], "Ukraine(Simferopol)烏克蘭 ":["+0300","","辛菲羅波爾"], "Belarus 白俄羅斯":["+0200","03L03|10L03","明斯克"] }, "Western Europe 西歐": { //---------------------------------------------- "Belgium 比利時 ":["+0100","03L01|10L01","布魯塞爾"], "France 法國 ":["+0100","03L01|10L01","巴黎"], "Ireland 愛爾蘭 ":["+0000","03L01|10L01","都柏林"], "Monaco 摩納哥 ":["+0100","","摩納哥市"], "Netherlands 荷蘭 ":["+0100","03L01|10L01","阿姆斯特丹"], "Luxembourg 盧森堡 ":["+0100","03L01|10L01","盧森堡市"], "United Kingdom 英國 ":["+0000","03L01|10L01","倫敦、愛丁堡"] }, "South Europe 南歐": { //------------------------------------------------ "Albania 阿爾巴尼亞":["+0100","","地拉那"], "Bulgaria 保加利亞":["+0200","","索菲亞"], "Greece 希臘 ":["+0200","03L01|10L01","雅典"], "Holy See 羅馬教廷":["+0100","","梵蒂岡"], "Italy 意大利 ":["+0100","03L01|10L01","羅馬"], "Malta 馬耳他 ":["+0100","","瓦萊塔"], "Portugal 葡萄牙 ":["+0000","03L01|10L01","里斯本"], "San Marino 圣馬利諾":["+0100","","圣馬利諾"], "Span 西班牙 ":["+0100","03L01|10L01","馬德里"], "Slovenia 斯洛文尼亞":["+0100","","盧布爾雅那"], "Yugoslavia 南斯拉夫(塞爾維亞)":["+0100","","貝爾格萊德"] }, "North America 北美洲": { //-------------------------------------------- "Canada(NST) 加拿大":["-0330","04F02|10L02","紐芬蘭、圣約翰、古斯灣"], "Canada(AST) 加拿大":["-0400","04F02|10L02","冰河灣、Pangnirtung"], "Canada(EST) 加拿大":["-0500","04F02|10L02","蒙特羅"], "Canada(CST) 加拿大":["-0600","04F02|10L02","雷迦納、雨河鎮、Swift Current"], "Canada(MST) 加拿大":["-0700","04F02|10L02","印奴維特港灣、埃德蒙頓、道森河"], "Canada(PST) 加拿大":["-0800","04F02|10L02","溫哥華"], "US(Eastern) 美國(東岸)":["-0500","04F02|10L02","華盛頓、紐約"], "US(Indiana) 美國 ":["-0500","","印第安納"], "US(Central) 美國(中部)":["-0600","04F02|10L02","芝加哥"], "US(Mountain) 美國(山區)":["-0700","04F02|10L02","丹佛"], "US(Arizona) 美國 ":["-0700","","亞歷桑那"], "US(Pacific) 美國(西岸)":["-0800","04F02|10L02","舊金山、洛杉磯"], "US(Alaska) 美國 ":["-0900","","阿拉斯加、朱諾"] }, "South America 中南美洲": { //------------------------------------------ "Antigua & Barbuda 安提瓜島及巴布達島":["-0400","","圣約翰"], "Argentina 阿根廷 ":["-0300","","布宜諾斯艾利斯"], "Bahamas 巴哈馬 ":["-0500","","拿騷"], "Barbados 巴巴多斯島":["-0400","","布里奇頓(橋鎮)"], "Belize 貝里斯 ":["-0600","","貝里斯"], "Bolivia 玻利維亞":["-0400","","拉巴斯"], "Brazil(AST) 巴西 ":["-0500","10F03|02L03","Porto Acre"], "Brazil(EST) 巴西 ":["-0300","10F03|02L03","巴西利亞、里約熱內盧"], "Brazil(FST) 巴西 ":["-0200","10F03|02L03","諾羅納"], "Brazil(WST) 巴西 ":["-0400","10F03|02L03","庫亞巴"], "Chilean 智利 ":["-0500","10F03|03F03","Hanga Roa"], "Chilean 智利 ":["-0300","10F03|03F03","圣地亞哥"], "Colombia 哥倫比亞":["-0500","","波哥大"], "Costa Rica 哥斯達黎加":["-0600","","圣何塞"], "Cuba 古巴 ":["-0500","04 13|10L03","哈瓦那"], "Dominican 多米尼加":["-0400","","圣多明各、羅梭"], "Ecuador 厄瓜多爾":["-0500","","基多"], "El Salvador 薩爾瓦多":["-0600","","圣薩爾瓦多"], "Falklands 福克蘭群島":["-0300","09F03|04F03","史丹利"], "Guatemala 危地馬拉":["-0600","","危地馬拉城"], "Haiti 海地 ":["-0500","","太子港"], "Honduras 洪都拉斯":["-0600","","特古西加爾巴"], "Jamaica 牙買加 ":["-0500","","金斯敦"], "Mexico(Mazatlan) 墨西哥 ":["-0700","","馬薩特蘭"], "Mexico(首都) 墨西哥 ":["-0600","","墨西哥城"], "Mexico(蒂華納) 墨西哥 ":["-0800","","蒂華納"], "Nicaragua 尼加拉瓜":["-0500","","馬那瓜"], "Panama 巴拿馬 ":["-0500","","巴拿馬市"], "Paraguay 巴拉圭 ":["-0400","10F03|02L03","亞松森"], "Peru 秘魯 ":["-0500","","利馬"], "Saint Kitts & Nevis 圣基茨和尼維斯":["-0400","","巴斯特爾(Basseterre)"], "St. Lucia 圣盧西亞":["-0400","","卡斯特里"], "St. Vincent & Grenadines 圣文森特和格林納丁斯":["-0400","","金斯敦"], "Suriname 蘇里南":["-0300","","帕拉馬里博(Paramaribo)"], "Trinidad & Tobago 特立尼達和多巴哥":["-0400","","西班牙港"], "Uruguay 烏拉圭 ":["-0300","","蒙得維的亞"], "Venezuela 委內瑞拉":["-0400","","加拉加斯"] }, "Africa 非洲": { //---------------------------------------------- "Algeria 阿爾及利亞":["+0100","","阿爾及爾"], "Angola 安哥拉 ":["+0100","","羅安達"], "Benin 貝南 ":["+0100","","新港"], "Botswana 博茨瓦納":["+0200","","哈博羅內"], "Burundi 布隆迪 ":["+0200","","布瓊布拉"], "Cameroon 喀麥隆 ":["+0100","","雅溫得"], "Cape Verde 佛德角 ":["-0100","","普拉亞"], "Central African 中非共和國":["+0100","","班吉"],
"Chad 乍得 ":["+0100","","恩賈梅納市"], "Congo 剛果(布)":["+0100","","布拉柴維爾"], "Djibouti 吉布提 ":["+0300","","吉布提"], "Egypt 埃及 ":["+0200","04L53|09L43","開羅"], "Equatorial Guinea 赤道幾內亞":["+0100","","馬博托"], "Ethiopia 埃塞俄比亞":["+0300","","亞的斯亞貝巴"], "Gabon 加蓬 ":["+0100","","利伯維爾"], "Gambia 岡比亞 ":["+0000","","班珠爾"], "Ghana 加納 ":["+0000","","阿克拉"], "Guinea 幾內亞 ":["+0000","","科納克里"], "Ivory Coast 象牙海岸":["+0000","","阿比讓、雅穆索戈"], "Kenya 肯尼亞 ":["+0300","","內羅畢"], "Lesotho 萊索托 ":["+0200","","馬塞盧"], "Liberia 利比里亞":["+0000","","蒙羅維亞"], "Madagascar 馬達加斯加":["+0300","","塔那那利佛"], "Malawi 馬拉維 ":["+0200","","利隆圭"], "Mali 馬里 ":["+0000","","巴馬科"], "Mauritania 毛里塔尼亞":["+0000","","努瓦克肖特"], "Mauritius 毛里求斯":["+0400","","路易港"], "Morocco 摩洛哥 ":["+0000","","卡薩布蘭卡"], "Mozambique 莫桑比克":["+0200","","馬普托"], "Namibia 納米比亞":["+0200","09F03|04F03","溫得和克"], "Niger 尼日爾 ":["+0100","","尼亞美"], "Nigeria 尼日利亞":["+0100","","阿布賈"], "Rwanda 盧旺達 ":["+0200","","基加利"], "Sao Tome 圣多美 ":["+0000","","圣多美"], "Senegal 塞內加爾":["+0000","","達卡爾"], "Sierra Leone 獅子山國":["+0000","","自由城"], "Somalia 索馬里 ":["+0300","","摩加迪沙"], "South Africa 南非 ":["+0200","","開普敦、普利托里亞"], "Sudan 蘇丹 ":["+0200","","喀土穆"], "Tanzania 坦桑尼亞":["+0300","","達累斯薩拉姆"], "Togo 多哥 ":["+0000","","洛美隆"], "Tunisia 突尼斯 ":["+0100","","突尼斯市"], "Uganda 烏干達 ":["+0300","","坎帕拉"], "Zaire 扎伊爾(剛果金) ":["+0100","","金沙薩"], "Zambia 贊比亞 ":["+0200","","盧薩卡"], "Zimbabwe 津巴布韋":["+0200","","哈拉雷"] }, "Oceania 大洋洲": { //---------------------------------------------- "American Samoa(US) 美屬薩摩亞(美)":["-1100","","帕果帕果港"], "Aus.(Adelaide) 澳大利亞 ":["+0930","10F03|03F03","阿得雷德"], "Aus.(Brisbane) 澳大利亞 ":["+1000","10F03|03F03","布里斯班"], "Aus.(Darwin) 澳大利亞 ":["+0930","10F03|03F03","達爾文"], "Aus.(Hobart) 澳大利亞 ":["+1000","10F03|03F03","荷伯特"], "Aus.(Perth) 澳大利亞 ":["+0800","10F03|03F03","佩思"], "Aus.(Sydney) 澳大利亞 ":["+1000","10F03|03F03","悉尼"], "Cook Islands(NZ) 庫克群島(新西蘭) ":["-1000","","阿瓦魯阿"], "Eniwetok 埃尼威托克島":["-1200","","埃尼威托克島"], "Fiji 斐濟 ":["+1200","11F03|02L03","蘇瓦"], "Guam 關島 ":["+1000","","阿加尼亞"], "Hawaii(US) 夏威夷(美)":["-1000","","檀香山"], "Kiribati 基里巴斯 ":["+1100","","塔拉瓦"], //"Mariana Islands 塞班島 ":["","","塞班島"], "Marshall Is. 馬紹爾群島":["+1200","","馬朱羅"], "Micronesia 密克羅尼西亞聯邦":["+1000","","帕利基爾(Palikir)"], "Midway Is.(US) 中途島(美)":["-1100","","中途島"], "Nauru Rep. 瑙魯共和國":["+1200","","亞倫"], "New Calednia(FR) 新克里多尼亞(法)":["+1100","","努美阿"], "New Zealand 新西蘭 ":["+1200","10F03|04F63","奧克蘭"], "New Zealand(CHADT) 新西蘭 ":["+1245","10F03|04F63","惠靈頓"], "Niue(NZ) 紐埃(新) ":["-1100","","阿洛菲(Alofi)"], "Nor. Mariana Is. 北馬里亞納群島(美)":["+1000","","塞班島"], "Palau 帕勞群島(帛琉群島) ":["+0900","","科羅爾"], "Papua New Guinea 巴布亞新幾內亞":["+1000","","莫爾斯比港"], "Pitcairn Is.(UK) 皮特克恩群島(英)":["-0830","","亞當斯敦"], "Polynesia(FR) 玻利尼西亞(法)":["-1000","","巴比蒂、塔希提"], "Solomon Is. 所羅門群島":["+1100","","霍尼亞拉"], "Tahiti 塔希提 ":["-1000","","帕佩特"], "Tokelau(NZ) 托克勞群島(新)":["-1100","","努庫諾努、法考福、阿塔富"], "Tonga 湯加 ":["+1300","10F63|04F63","努庫阿洛法"], "Tuvalu 圖瓦盧 ":["+1200","","富納富提"], "Vanuatu 瓦努阿圖(新赫布里底群島)":["+1100","","維拉港"], "Western Samoa 西薩摩亞":["-1100","","阿皮亞"], "國際換日線 ":["-1200","","國際換日線"] } };
/***************************************************************************** 日期計算 *****************************************************************************/
//====================================== 返回農歷 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-1899]&0xf)==0xf? 30: 29); else return(0); }
//====================================== 返回農歷 y年閏哪個月 1-12 , 沒閏返回 0 function leapMonth(y) { var lm = lunarInfo[y-1900] & 0xf; return(lm==0xf?0:lm); }
//====================================== 返回農歷 y年m月的總天數 function monthDays(y,m) { return( (lunarInfo[y-1900] & (0x10000>>m))? 30: 29 ); }
//====================================== 算出農歷, 傳入日期控件, 返回農歷日期控件 // 該控件屬性有 .year .month .day .isLeap 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;
for(i=1900; i<2100 && offset>0; i++) { temp=lYearDays(i); offset-=temp; }
if(offset<0) { offset+=temp; i--; }
this.year = i;
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(offset==0 && leap>0 && i==leap+1) if(this.isLeap) { this.isLeap = false; } else { this.isLeap = true; --i; }
if(offset<0){ offset += temp; --i; }
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; //公元年4位數字 this.sMonth = sMonth; //公元月數字 this.sDay = sDay; //公元日數字 this.week = week; //星期, 1個中文 //農歷 this.lYear = lYear; //公元年4位數字 this.lMonth = lMonth; //農歷月數字 this.lDay = lDay; //農歷日數字 this.isLeap = isLeap; //是否為農歷閏月? //八字 this.cYear = cYear; //年柱, 2個中文 this.cMonth = cMonth; //月柱, 2個中文 this.cDay = cDay; //日柱, 2個中文
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月) /* 功能說明: 返回整個月的日期資料控件
使用方式: OBJ = new calendar(年,零起算月);
OBJ.length 返回當月最大日 OBJ.firstWeek 返回當月一日星期
由 OBJ[日期].屬性名稱 即可取得各項值
OBJ[日期].isToday 返回是否為今日 true 或 false
其他 OBJ[日期] 屬性參見 calElement() 中的注解 */ function calendar(y,m) {
var sDObj, lDObj, lY, lM, lD=1, lL, lX=0, tmp1, tmp2, tmp3; var cY, cM, cD; //年柱,月柱,日柱 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日星期幾
////////年柱 1900年立春后為庚子年(60進制36) if(m<2) cY=cyclical(y-1900+36-1); else cY=cyclical(y-1900+36); var term2=sTerm(y,2); //立春日期
////////月柱 1900年1月小寒以前為 丙子月(60進制12) var firstNode = sTerm(y,m*2) //返回當月「節」為幾日開始 cM = cyclical((y-1900)*12+m+12);
//當月一日與 1900/1/1 相差天數 //1900/1/1與 1970/1/1 相差25567日, 1900/1/1 日柱為甲戌日(60進制10) var dayCyclical = Date.UTC(y,m,1,0,0,0,0)/86400000+25567+10;
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; }
//依節氣調整二月分的年柱, 以立春為界 if(m==1 && (i+1)==term2) cY=cyclical(y-1900+36); //依節氣月柱, 以「節」為界 if((i+1)==firstNode) cM = cyclical((y-1900)*12+m+13); //日柱 cD = cyclical(dayCyclical+i);
//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, cY ,cM, cD ); }
//節氣 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); if(tmp1<5) this[((this.firstWeek>tmp2)?7:0) + 7*(tmp1-1) + tmp2 - this.firstWeek].solarFestival += RegExp.$5 + ' '; else { tmp1 -= 5; tmp3 = (this.firstWeek+this.length-1)%7; //當月最后一天星期? this[this.length - tmp3 - 7*tmp1 + tmp2 - (tmp2>tmp3?7:0) - 1 ].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].isLeap!=true) { this[tmp2].lunarFestival += RegExp.$4 + ' '; if(RegExp.$3=='*') this[tmp2].color = 'red'; } } }
//復活節只出現在3或4月 if(m==2 || m==3) { var estDay = new easter(y); if(m == estDay.m) this[estDay.d-1].solarFestival = this[estDay.d-1].solarFestival+' 復活節 Easter Sunday'; }
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(m==8) this[13].solarFestival = this[13].solarFestival+unescape('%u795D%u8D3A%u6885%u7AF9%u677E%u751F%u65E5%u5FEB%u4E50%u003A%u0029');
//今日 if(y==tY && m==tM) this[tD-1].isToday = true; }
//======================================= 返回該年的復活節(春分后第一次滿月周后的第一主日) function easter(y) {
var term2=sTerm(y,5); //取得春分日期 var dayTerm2 = new Date(Date.UTC(y,2,term2,0,0,0,0)); //取得春分的公歷日期控件(春分一定出現在3月) var lDayTerm2 = new Lunar(dayTerm2); //取得取得春分農歷
if(lDayTerm2.day<15) //取得下個月圓的相差天數 var lMlen= 15-lDayTerm2.day; else var lMlen= (lDayTerm2.isLeap? leapDays(y): monthDays(y,lDayTerm2.month)) - lDayTerm2.day + 15;
//一天等于 1000*60*60*24 = 86400000 毫秒 var l15 = new Date(dayTerm2.getTime() + 86400000*lMlen ); //求出第一次月圓為公歷幾日 var dayEaster = new Date(l15.getTime() + 86400000*( 7-l15.getUTCDay() ) ); //求出下個周日
this.m = dayEaster.getUTCMonth(); this.d = dayEaster.getUTCDate();
}
//====================== 中文日期 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); }
///////////////////////////////////////////////////////////////////////////////
var cld;
function drawCld(SY,SM) { var i,sD,s,size; cld = new calendar(SY,SM);
if(SY>1874 && SY<1909) yDisplay = '光緒' + (((SY-1874)==1)?'元':SY-1874); if(SY>1908 && SY<1912) yDisplay = '宣統' + (((SY-1908)==1)?'元':SY-1908); if(SY>1911 && SY<1950) yDisplay = '民國' + (((SY-1911)==1)?'元':SY-1911); if(SY>1948) yDisplay = '建國' + (((SY-1949)==1)?'元':SY-1949);
GZ.innerHTML = yDisplay +'年 農歷 ' + cyclical(SY-1900+36) + '年 【'+Animals[(SY-4)%12]+'年】';
YMBG.innerHTML = " " + SY + "<BR> " + monthName[SM];
for(i=0;i<42;i++) {
sObj=eval('SD'+ i); lObj=eval('LD'+ i);
sObj.className = '';
sD = i - cld.firstWeek;
if(sD>-1 && sD<cld.length) { //日期內 sObj.innerHTML = sD+1;
if(cld[sD].isToday) sObj.className = 'todyaColor'; //今日顏色
sObj.style.color = cld[sD].color; //法定假日顏色
if(cld[sD].lDay==1) //顯示農歷月 lObj.innerHTML = '<b>'+(cld[sD].isLeap?'閏':'') + cld[sD].lMonth + '月' + (monthDays(cld[sD].lYear,cld[sD].lMonth)==29?'小':'大')+'</b>'; else //顯示農歷日 lObj.innerHTML = cDay(cld[sD].lDay);
s=cld[sD].lunarFestival; if(s.length>0) { //農歷節日 if(s.length>6) s = s.substr(0, 4)+'...'; s = s.fontcolor('red'); } else { //公歷節日 s=cld[sD].solarFestival; if(s.length>0) { size = (s.charCodeAt(0)>0 && s.charCodeAt(0)<128)?8:4; if(s.length>size+2) s = s.substr(0, size)+'...'; s=(s=='黑色星期五')?s.fontcolor('black'):s.fontcolor('blue'); } else { //廿四節氣 s=cld[sD].solarTerms; if(s.length>0) s = s.fontcolor('limegreen'); } }
if(cld[sD].solarTerms=='清明') s = '清明節'.fontcolor('red'); if(cld[sD].solarTerms=='芒種') s = '芒種'.fontcolor('red'); if(cld[sD].solarTerms=='夏至') s = '夏至'.fontcolor('red'); if(cld[sD].solarTerms=='冬至') s = '冬至'.fontcolor('red');
if(s.length>0) lObj.innerHTML = s;
} else { //非日期 sObj.innerHTML = ''; lObj.innerHTML = ''; } } }
function changeCld() { var y,m; y=CLD.SY.selectedIndex+1900; m=CLD.SM.selectedIndex; drawCld(y,m); }
function pushBtm(K) { switch (K){ case 'YU' : if(CLD.SY.selectedIndex>0) CLD.SY.selectedIndex--; break; case 'YD' : if(CLD.SY.selectedIndex<200) CLD.SY.selectedIndex++; break; case 'MU' : if(CLD.SM.selectedIndex>0) { CLD.SM.selectedIndex--; } else { CLD.SM.selectedIndex=11; if(CLD.SY.selectedIndex>0) CLD.SY.selectedIndex--; } break; case 'MD' : if(CLD.SM.selectedIndex<11) { CLD.SM.selectedIndex++; } else { CLD.SM.selectedIndex=0; if(CLD.SY.selectedIndex<200) CLD.SY.selectedIndex++; } break; default : CLD.SY.selectedIndex=tY-1900; CLD.SM.selectedIndex=tM; } changeCld(); }
var Today = new Date(); var tY = Today.getFullYear(); var tM = Today.getMonth(); var tD = Today.getDate(); //////////////////////////////////////////////////////////////////////////////
var width = "130"; var offsetx = 2; var offsety = 8;
var x = 0; var y = 0; var snow = 0; var sw = 0; var cnt = 0;
var dStyle; document.onmousemove = mEvn;
//顯示詳細日期資料 function mOvr(v) { var s,festival; var sObj=eval('SD'+ v); var d=sObj.innerHTML-1;
//sYear,sMonth,sDay,week, //lYear,lMonth,lDay,isLeap, //cYear,cMonth,cDay
if(sObj.innerHTML!='') {
sObj.style.cursor = 's-resize';
if(cld[d].solarTerms == '' && cld[d].solarFestival == '' && cld[d].lunarFestival == '') festival = ''; else festival = '<TABLE WIDTH=100% BORDER=0 CELLPADDING=2 CELLSPACING=0 BGCOLOR="#CCFFCC"><TR><TD>'+ '<FONT COLOR="#000000" STYLE="font-size:9pt;">'+cld[d].solarTerms + ' ' + cld[d].solarFestival + ' ' + cld[d].lunarFestival+'</FONT></TD>'+ '</TR></TABLE>';
s= '<TABLE WIDTH="130" BORDER=0 CELLPADDING="2" CELLSPACING=0 BGCOLOR="#000066" style="filter:Alpha(opacity=80)"><TR><TD>' + '<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0><TR><TD ALIGN="right"><FONT COLOR="#ffffff" STYLE="font-size:9pt;">'+ cld[d].sYear+' 年 '+cld[d].sMonth+' 月 '+cld[d].sDay+' 日<br>星期'+cld[d].week+'<br>'+ '<font color="violet">農歷'+(cld[d].isLeap?'閏 ':' ')+cld[d].lMonth+' 月 '+cld[d].lDay+' 日</font><br>'+ '<font color="yellow">'+cld[d].cYear+'年 '+cld[d].cMonth+'月 '+cld[d].cDay + '日</font>'+ '</FONT></TD></TR></TABLE>'+ festival +'</TD></TR></TABLE>';
document.all["detail"].innerHTML = s;
if (snow == 0) { dStyle.left = x+offsetx-(width/2); dStyle.top = y+offsety; dStyle.visibility = "visible"; snow = 1; } } }
//清除詳細日期資料 function mOut() { if ( cnt >= 1 ) { sw = 0; } if ( sw == 0 ) { snow = 0; dStyle.visibility = "hidden";} else cnt++; }
//取得位置 function mEvn() { x=event.x; y=event.y; if (document.body.scrollLeft) {x=event.x+document.body.scrollLeft; y=event.y+document.body.scrollTop;} if (snow){ dStyle.left = x+offsetx-(width/2); dStyle.top = y+offsety; } }
/***************************************************************************** 世界時間計算 *****************************************************************************/ var OneHour = 60*60*1000; var OneDay = OneHour*24; var TimezoneOffset = Today.getTimezoneOffset()*60*1000;
function showUTC(objD) { var dn,s; var hh = objD.getUTCHours(); var mm = objD.getUTCMinutes(); var ss = objD.getUTCSeconds(); s = objD.getUTCFullYear() + "年" + (objD.getUTCMonth() + 1) + "月" + objD.getUTCDate() +"日 ("+ nStr1[objD.getUTCDay()] +")";
if(hh>12) { hh = hh-12; dn = '下午'; } else dn = '上午';
if(hh<10) hh = '0' + hh; if(mm<10) mm = '0' + mm; if(ss<10) ss = '0' + ss;
s += " " + dn + ' ' + hh + ":" + mm + ":" + ss; return(s); }
function showLocale(objD) { var dn,s; var hh = objD.getHours(); var mm = objD.getMinutes(); var ss = objD.getSeconds(); s = objD.getFullYear() + "年" + (objD.getMonth() + 1) + "月" + objD.getDate() +"日 ("+ nStr1[objD.getDay()] +")";
if(hh>12) { hh = hh-12; dn = '下午'; } else dn = '上午';
if(hh<10) hh = '0' + hh; if(mm<10) mm = '0' + mm; if(ss<10) ss = '0' + ss;
s += " " + dn + ' ' + hh + ":" + mm + ":" + ss; return(s); }
//傳入時差字串, 返回偏移之正負毫秒 function parseOffset(s) { var sign,hh,mm,v; sign = s.substr(0,1)=='-'?-1:1; hh = Math.floor(s.substr(1,2)); mm = Math.floor(s.substr(3,2)); v = sign*(hh*60+mm)*60*1000; return(v); }
//返回UTC日期控件 (年,月-1,第幾個星期幾,幾點) function getWeekDay(y,m,nd,w,h){ var d,d2,w1; if(nd>0){ d = new Date(Date.UTC(y, m, 1)); w1 = d.getUTCDay(); d2 = new Date( d.getTime() + ((w<w1? w+7-w1 : w-w1 )+(nd-1)*7 )*OneDay + h*OneHour); } else { nd = Math.abs(nd); d = new Date( Date.UTC(y, m+1, 1) - OneDay ); w1 = d.getUTCDay(); d2 = new Date( d.getTime() + ( (w>w1? w-7-w1 : w-w1 )-(nd-1)*7 )*OneDay + h*OneHour); } return(d2); }
//傳入某時間值, 日光節約字串 返回 true 或 false function isDaylightSaving(d,strDS) {
if(strDS == '') return(false);
var m1,n1,w1,t1; var m2,n2,w2,t2; with (Math){ m1 = floor(strDS.substr(0,2))-1; w1 = floor(strDS.substr(3,1)); t1 = floor(strDS.substr(4,1)); m2 = floor(strDS.substr(6,2))-1; w2 = floor(strDS.substr(9,1)); t2 = floor(strDS.substr(10,1)); }
switch(strDS.substr(2,1)){ case 'F': n1=1; break; case 'L': n1=-1; break; default : n1=0; break; }
switch(strDS.substr(8,1)){ case 'F': n2=1; break; case 'L': n2=-1; break; default : n2=0; break; }
var d1, d2, re;
if(n1==0) d1 = new Date(Date.UTC(d.getUTCFullYear(), m1, Math.floor(strDS.substr(2,2)),t1)); else d1 = getWeekDay(d.getUTCFullYear(),m1,n1,w1,t1);
if(n2==0) d2 = new Date(Date.UTC(d.getUTCFullYear(), m2, Math.floor(strDS.substr(8,2)),t2)); else d2 = getWeekDay(d.getUTCFullYear(),m2,n2,w2,t2);
if(d2>d1) re = (d>d1 && d<d2)? true: false; else re = (d>d1 || d<d2)? true: false;
return(re); }
var isDS = false;
//計算全球時間 function getGlobeTime() { var d,s; d = new Date();
d.setTime(d.getTime()+parseOffset(objTimeZone[0]));
isDS=isDaylightSaving(d,objTimeZone[1]); if(isDS) d.setTime(d.getTime()+OneHour); return(showUTC(d)); }
var objTimeZone; var objContinentMenu; var objCountryMenu;
function tick() { var today; today = new Date(); LocalTime.innerHTML = showLocale(today); GlobeTime.innerHTML = getGlobeTime(); window.setTimeout("tick()", 1000); }
//指定自定索引時區 function setTZ(a,c){ objContinentMenu.options[a].selected=true; chContinent(); objCountryMenu.options[c].selected=true; chCountry(); }
//變更區域 function chContinent() { var key,i; continent = objContinentMenu.options[objContinentMenu.selectedIndex].text; for (var i = objCountryMenu.options.length-1; i >= 0; i--) objCountryMenu[0]=null; for (key in timeData[continent]) objCountryMenu.options[objCountryMenu.options.length]=new Option(key); objCountryMenu.options[0].selected=true; chCountry(); }
//變更國家 function chCountry() { var txtContinent = objContinentMenu.options[objContinentMenu.selectedIndex].text; var txtCountry = objCountryMenu.options[objCountryMenu.selectedIndex].text;
objTimeZone = timeData[txtContinent][txtCountry];
getGlobeTime();
//地圖位移 City.innerHTML = (isDS==true?"<SPAN STYLE='font-size:12pt;font-family:Wingdings; color:Red;'>R</span> ":'') + objTimeZone[2]; //首都 var pos = Math.floor(objTimeZone[0].substr(0,3)); if(pos<0) pos+=24; pos*=-10; world.style.left = pos;
}
function setCookie(name,value) { var today = new Date(); var expires = new Date(); expires.setTime(today.getTime() + 1000*60*60*24*365); document.cookie = name + "=" + escape(value) + "; expires=" + expires.toGMTString(); }
function getCookie(Name) { var search = Name + "="; if(document.cookie.length > 0) { offset = document.cookie.indexOf(search); if(offset != -1) { offset += search.length; end = document.cookie.indexOf(";", offset); if(end == -1) end = document.cookie.length; return unescape(document.cookie.substring(offset, end)); } else return(''); } else return(''); }
///////////////////////////////////////////////////////////////////////////
function initialize() { var key;
//時間 map.filters.Light.Clear(); map.filters.Light.addAmbient(255,255,255,60); map.filters.Light.addCone(120, 60, 80, 120, 60, 255,255,255,120,60);
objContinentMenu=document.WorldClock.continentMenu; objCountryMenu=document.WorldClock.countryMenu;
for (key in timeData) objContinentMenu[objContinentMenu.length]=new Option(key);
var TZ1 = getCookie('TZ1'); var TZ2 = getCookie('TZ2');
if(TZ1=='') {TZ1=0; TZ2=3;} setTZ(TZ1,TZ2);
tick();
//陰歷 dStyle = detail.style; CLD.SY.selectedIndex=tY-1900; CLD.SM.selectedIndex=tM; drawCld(tY,tM);
}
function terminate() { setCookie("TZ1",objContinentMenu.selectedIndex); setCookie("TZ2",objCountryMenu.selectedIndex); }
//-->
|