﻿<!--
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)
var Animals=new Array("鼠","牛","虎","兔","龍","蛇","馬","羊","猴","雞","狗","豬");
var Gan=new Array("甲","乙","丙","丁","戊","己","庚","辛","壬","癸");
var Zhi=new Array("子","醜","寅","卯","辰","巳","午","未","申","酉","戌","亥");
var now = new Date();
var SY = now.getFullYear(); 
var SM = now.getMonth();
var SD = now.getDate();

//==== 傳入 offset 傳回幹支, 0=甲子
function cyclical(num) { return(Gan[num%10]+Zhi[num%12])}

//==== 傳回農曆 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 baseDate = new Date(1900,0,31)
   var offset   = (objDate - baseDate)/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
}

function YYMMDD(){ 
    var cl = '<font color="#9B9B9B">'; 
    if (now.getDay() == 0) cl = '<font color="#9B9B9B">'; 
    if (now.getDay() == 6) cl = '<font color="#9B9B9B">';
    return(cl+SY+'年'+(SM+1)+'月'+SD+'日</font>'); 
}
function weekday(){ 
    var day = new Array("星期日","星期一","星期二","星期三","星期四","星期五","星期六");
    var cl = '<font color="#9B9B9B">'; 
    if (now.getDay() == 0) cl = '<font color="#9B9B9B">';
    if (now.getDay() == 6) cl = '<font color="#9B9B9B">'; 
    return(cl+ day[now.getDay()]+ '</font>'); 

}
//==== 中文日期
function cDay(m,d){
var nStr1 = new Array('日','一','二','三','四','五','六','七','八','九','十');
var nStr2 = new Array('初','十','廿','卅','　');
var s;
if (m>10){s = '十'+nStr1[m-10]} else {s = nStr1[m]} s += '月'
switch (d) {
  case 10:s += '初十'; break;
  case 20:s += '二十'; break;
  case 30:s += '三十'; break;
  default:s += nStr2[Math.floor(d/10)]; s += nStr1[d%10];
}
return(s);
}

function solarDay2(){
    var sDObj = new Date(SY,SM,SD);
    var lDObj = new Lunar(sDObj);
    var cl = '<font color="#9B9B9B">'; 
    //農曆BB'+(cld[d].isLeap?'閏 ':' ')+cld[d].lMonth+' 月 '+cld[d].lDay+' 日
    var tt = cyclical(SY-1900+36)+'年 '+cDay(lDObj.month,lDObj.day);
    return(cl+tt+'</font>');
}

function solarDay3(){
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,462324,483532,504758)
var solarTerm = new Array("小寒","大寒","立春","雨水","驚蟄","春分","清明","穀雨","立夏","小滿","芒種","夏至","小暑","大暑","立秋","處暑","白露","秋分","寒露","霜降","立冬","小雪","大雪","冬至")
var lFtv = new Array(
"0101 春節",
"0115 元宵節",
"0707 七夕情人節",
"0715 中元節",
"0815 中秋節",
"0909 重陽節",
"1208 臘八節",
"1224 小年",
"0100 除夕")

var sFtv = new Array(
 "0101*元旦節",
"0210 氣象節",
"0214 情人節",
"0303 愛耳日",
"0308 婦女節",
"0312 植樹節",
"0314 員警日",
"0315 消費日",
"0321 森林日",
"0322 水日",
"0323 氣象日",
"0324 結核病日",
"0325 安全日",
"0401 愚人節",
"0407 衛生日",
"0422 地球日",
"0501*勞動節",
"0508 紅十字日",
"0512 護士節",
"0515 家庭日",
"0517 電信日",
"0518 博物館日",
"0523 牛奶日",
"0531 無煙日", 
"0601 兒童節",
"0605 環保日",
"0702 記者日",
"0711 人口日",
"0908 掃盲日",
"0914 清潔日",
"0920 愛牙日",
"0927 旅遊日",
"1004 動物日",
"1006 老人節",
"1009 郵政日",
"1013 教師節",
"1014 標準日",
"1015 盲人節",
"1016 糧食日",
"1017 貧困日",
"1022 醫藥日",
"1024 聯合國日",
"1031 勤儉日",
"1110 青年節",
"1112 孫中山紀念日",
"1114 糖尿病日",
"1117 大學生節",
"1201 愛滋病日",
"1203 殘疾人日",
"1208 兒童電視日",
"1209 足球日",
"1210 人權日",
"1221 籃球日",
"1224 平安夜",
"1225 耶誕節")

  var sDObj = new Date(SY,SM,SD);
  var lDObj = new Lunar(sDObj);
  var lDPOS = new Array(3)
  var festival='',solarTerms='',solarFestival='',lunarFestival='',tmp1,tmp2;
  //農曆節日 
  for(i in lFtv)
  if(lFtv[i].match(/^(\d{2})(.{2})([\s\*])(.+)$/)) {
   tmp1=Number(RegExp.$1)-lDObj.month
   tmp2=Number(RegExp.$2)-lDObj.day
   if(tmp1==0 && tmp2==0) lunarFestival=RegExp.$4 
  }
  //國曆節日
  for(i in sFtv)
  if(sFtv[i].match(/^(\d{2})(\d{2})([\s\*])(.+)$/)){
   tmp1=Number(RegExp.$1)-(SM+1)
   tmp2=Number(RegExp.$2)-SD
   if(tmp1==0 && tmp2==0) solarFestival = RegExp.$4 
  }
  //節氣
  tmp1 = new Date((31556925974.7*(SY-1900)+sTermInfo[SM*2+1]*60000)+Date.UTC(1900,0,6,2,5))
  tmp2 = tmp1.getUTCDate()
  if (tmp2==SD) solarTerms = solarTerm[SM*2+1]  
  tmp1 = new Date((31556925974.7*(SY-1900)+sTermInfo[SM*2]*60000)+Date.UTC(1900,0,6,2,5))
  tmp2= tmp1.getUTCDate()
  if (tmp2==SD) solarTerms = solarTerm[SM*2] 

  if(solarTerms == '' && solarFestival == '' && lunarFestival == '')
    festival = '';
  else
//    festival = '<FONT COLOR="#9B9B9B">'+solarTerms + ' ' + solarFestival + ' ' + lunarFestival+'</FONT>';
    festival = '';
         
  var cl = '<font color="#9B9B9B">';
  return(cl+festival+'</font>');
}
function setCalendar(){

    document.write(YYMMDD()+'&nbsp;'+weekday()+'&nbsp;'+solarDay2()+'&nbsp;'+solarDay3());

}

setCalendar();
//-->
