📄 stchinesecalendar.js
字号:
{
sTitle:"中国农历",
iType:0,
foTranslation:function(y,m,d,h,mi,s,ms)
{
var i, leap=0, temp=0,o={};
//-2206396800000 为Date.UTC(1900,0,31)由于safari 1.0不明 bug,暂时给东8区固定值;
var offset = (Date.UTC(y,m-1,d) - (-2206396800000))/86400000;
for(i=1900; i<2100 && offset>0; i++)
{
temp=this.fiLYearDays(i);
offset-=temp;
}
if(offset<0)
{
offset+=temp;
i--;
}
o.iYear = i;
leap = this.fbLeapMonth(i);
o.bIsLeap = false;
for(i=1; i<13 && offset>0; i++)
{
if(leap>0 && i==(leap+1) && o.bIsLeap==false)
{
--i;
o.bIsLeap = true;
temp = this.fiLeapDays(o.iYear);
}
else
{
temp = this.fiMonthDays(o.iYear, i);
}
if(o.bIsLeap==true && i==(leap+1))
o.bIsLeap = false;
offset -= temp;
}
if(offset==0 && leap>0 && i==leap+1)
if(o.bIsLeap)
{
o.bIsLeap = false;
}
else
{
o.bIsLeap = true;
--i;
}
if(offset<0)
{
offset += temp; --i;
}
if(m<2)
{
o.sCY=this.cyclical(y-1900+36-1);
o.sAnimal=this.aAnimals[Math.floor((y-1900+36-1)%12)];
}
else
{
o.sCY=this.cyclical(y-1900+36);
o.sAnimal=this.aAnimals[Math.floor((y-1900+36)%12)];
}
var term2=this.fsTerm(y,2);
var firstNode =this.fsTerm(y,m*2)
var dayCyclical = Date.UTC(y,m,1,0,0,0,0)/86400000+25567+10;
o.sCM=this.cyclical((y-1900)*12+m+12);
if(m==2 && d==term2){
o.sCY==this.cyclical(y-1900+36);
}
if(d==firstNode)
{
o.sCM= this.cyclical((y-1900)*12+m+13);
}
o.sCD =this. cyclical(dayCyclical+d-1);
o.oParent=this;
o.iMonth = i;
o.iDay = offset + 1;
o.sIco='images/nong.gif';
o.fsGetSimpleTxt=this.fsGetSimpleTxt;
o.fsGetWholeTxt=this.fsGetWholeTxt;
o.fsGetIco=this.fsGetIco;
o.sTerm="";
if(this.fsTerm(y,(m-1)*2)==d)
o.sTerm=this.aTerm[(m-1)*2];
else if(this.fsTerm(y,(m-1)*2+1)==d)
o.sTerm=this.aTerm[(m-1)*2+1];
o.sFtv="";
for(var i=0;i<this.aFtv.length;i++)
if(this.aFtv[i].match(/^(\d{2})(.{2})([\s\*])(.+)$/))
if(o.iMonth==Number(RegExp.$1) && o.iDay==Number(RegExp.$2))
o.sFtv=RegExp.$4;
return o;
},
fiParse:function(s)
{
},
fsGetIco:function()
{
return this.sIco;
},
fsGetSimpleTxt:function()
{
if(this.sFtv)
return "<span class='ccalendarFestival'>"+this.sFtv+"</span>";
if(this.sTerm)
return "<span class='ccalelndarTerm'>"+this.sTerm+"</span>";
return this.oParent.fsGetDayStr(this.iDay);
},
fsGetWholeTxt:function()
{
return "<table cellpadding=0 cellspacing=0><td valign='top'><img src='"+this.sIco+"'></td><td style='float:left'>"+this.sCY+this.sAnimal+"年 "+(this.bIsLeap?"闰":"")+this.oParent.fsGetMonthStr(this.iMonth)+"月 "+this.oParent.fsGetDayStr(this.iDay)+" "+this.sFtv+" "+this.sTerm+"</td></table>";
},
fsGetMonthStr:function(d)
{
var s2="";
switch (d)
{
case 1:
s2 = '正'; break;
case 2:
s2 = '二'; break;
case 3:
s2 = '三'; break;
case 4:
s2 = '四'; break;
case 5:
s2 = '五'; break;
case 6:
s2 = '六'; break;
case 7:
s2 = '七'; break;
case 8:
s2 = '八'; break;
case 9:
s2 = '九'; break;
case 10:
s2 = '十'; break;
case 11:
s2 = '十一'; break;
case 12:
s2 = '十二'; break;
}
return(s2);
},
cyclical:function(num)
{
return(this.aGan[Math.floor(num%10)]+this.aZhi[Math.floor(num%12)])
},
fsGetDayStr:function(d)
{
var s;
if(d>30)
return "";
switch (d)
{
case 10:
s = '初十'; break;
case 20:
s = '二十'; break;
case 30:
s = '三十'; break;
default:
s = this.aPerfix[Math.floor(d/10)]+this.aNumber[Math.floor(d%10)];
}
return s;
},
aLunarDat:[
"19416",
"19168",
"42352",
"21717",
"53856",
"55632",
"21844",
"22191",
"39632",
"21970",
"19168",
"42422",
"42192",
"53840",
"53909",
"46415",
"54944",
"44450",
"38320",
"18807",
"18815",
"42160",
"46261",
"27216",
"27968",
"43860",
"11119",
"38256",
"21234",
"18800",
"25958",
"54432",
"59984",
"27285",
"23263",
"11104",
"34531",
"37615",
"51415",
"51551",
"54432",
"55462",
"46431",
"22176",
"42420",
"9695",
"37584",
"53938",
"43344",
"46423",
"27808",
"46416",
"21333",
"19887",
"42416",
"17779",
"21183",
"43432",
"59728",
"27296",
"44710",
"43856",
"19296",
"43748",
"42352",
"21088",
"62051",
"55632",
"23383",
"22176",
"38608",
"19925",
"19152",
"42192",
"54484",
"53840",
"54616",
"46400",
"46752",
"38310",
"38335",
"18864",
"43380",
"42160",
"45690",
"27216",
"27968",
"44870",
"43872",
"38256",
"19189",
"18800",
"25776",
"29859",
"59984",
"27480",
"23232",
"43872",
"38613",
"37600",
"51552",
"55636",
"54432",
"55888",
"30034",
"22176",
"43959",
"9680",
"37584",
"51893",
"43344",
"46240",
"47780",
"44368",
"21977",
"19360",
"42416",
"20854",
"21183",
"43312",
"31060",
"27296",
"44368",
"23378",
"19296",
"42726",
"42208",
"53856",
"60005",
"54576",
"23200",
"30371",
"38608",
"19195",
"19152",
"42192",
"53430",
"53855",
"54560",
"56645",
"46496",
"22224",
"21938",
"18864",
"42359",
"42160",
"43600",
"45653",
"27951",
"44448",
"19299",
"37759",
"18936",
"18800",
"25776",
"26790",
"59999",
"27424",
"42692",
"43759",
"37600",
"53987",
"51552",
"54615",
"54432",
"55888",
"23893",
"22176",
"42704",
"21972",
"21200",
"43448",
"43344",
"46240",
"46758",
"44368",
"21920",
"43940",
"42416",
"21168",
"45683",
"26928",
"29495",
"27296",
"44368",
"19285",
"19311",
"42352",
"21732",
"53856",
"59752",
"54560",
"55968",
"27302",
"22239",
"19168",
"43476",
"42192",
"53584",
"62034",
"54560"
],
aTermDat:[ 0,
21208,
42467,
63836,
85337,
107014,
128867,
150921,
173149,
195551,
218072,
240693,
263343,
285989,
308563,
331033,
353350,
375494,
397447,
419210,
440795,
462224,
483532,
504758
],
aNumber:['零','一','二','三','四','五','六','七','八','九','十'],
aAnimals:["鼠","牛","虎","兔","龙","蛇","马","羊","猴","鸡","狗","猪"],
aPerfix:['初','十','廿','卅',' '],
aGan:["甲","乙","丙","丁","戊","已","庚","辛","壬","癸"],
aZhi:["子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥"],
aTerm:["小寒","大寒","立春","雨水","惊蛰","春分","清明","谷雨","立夏","小满","芒种","夏至","小暑","大暑","立秋","处暑","白露","秋分","寒露","霜降","立冬","小雪","大雪","冬至"],
aFtv:[ "0101*春节",
"0115*元宵",
"0505*端午",
"0815*中秋",
"0909 重阳",
"1208 腊八",
"1224 小年",
"0100*除夕"],
fiLYearDays:function(y)
{
var i, sum = 348;
for(i=0x8000; i>0x8; i>>=1) sum += (this.aLunarDat[y-1900] & i)? 1: 0;
return(sum+this.fiLeapDays(y));
},
fiLeapDays:function(y) {
if(this.fbLeapMonth(y)) return( (this.aLunarDat[y-1899]&0xf)==0xf? 30: 29);
else return(0);
},
fbLeapMonth:function(y) {
var lm = this.aLunarDat[y-1900] & 0xf;
return(lm==0xf?0:lm);
},
fiMonthDays:function(y,m) {
return( (this.aLunarDat[y-1900] & (0x10000>>m))? 30: 29 )
},
fsTerm:function(y,n)
{
//-2208549300000为 Date.UTC(1900,0,6,2,5),由于safari 1.0不明 bug,暂时给东8区固定值
var offDate = new Date( ( 31556925974.7*(y-1900) + this.aTermDat[n]*60000 ) + (-2208549300000) )
return(offDate.getUTCDate())
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -