Javascript实现节日和阴历的特殊日历效果。

带农历和月历的脚本:

复制代码代码如下所示:







月历



<!——

无功lunarinfo =新的数组(

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)



无功solarmonth =新的数组(31,28,31,30,31,30,31,31,30,31,30,31);

var动物=新数组()

VaR个节气=新的数组(冷

无功sterminfo =新的数组(021208424676383685337107014128867150921173149195551218072240693263343285989308563331033353350375494397447419210440795462224483532504758)。

无功nstr1 =新的数组(天','一','二'、三、四、五、六、七、八、九、十);

无功nstr2 =新的数组(早、十、20 30);

阳历/假日

无功sftv =新的数组(

0101元旦

0214情人节

0308妇女节

0312植树节

0315消费者权益日

0401四月愚人节

0501劳动节

0504青年节

0512护士节

0601儿童节

0701党建设节

0801建军节

0910教师节

0928孔子诞辰

1001国庆节

1006个老人节

1024次联合国日

1224圣诞夜

1225圣诞节

中秋节

无功lftv =新的数组(

0101个春节

0115元宵节

0505端午节

0707七夕情人节

鬼节0715

0815中秋节

0909第九节

1208洛杉矶8

1224年

每年返回农历年的总数。

功能lyeardays(Y){

var I,总和= 348;

对(我= 0x8000;我> > > 0x8;我= 1)和+ =(lunarinfo { }我y-1900)1:0;

返回(和+ leapdays(Y));

}

农历闰年

功能leapdays(Y){

如果(闰月(y)()返回(lunarinfo { y-1900 } 0x10000)30:29);

否则返回(0);

}

农历不是闰年,返回0。

功能闰月(Y){

返回(lunarinfo { y-1900 } 0xf);

}

返回y年的总数量。

功能monthdays(Y,M){

返回(((lunarinfo { y-1900 }(0x10000 > > m))30:29);

}

本月的第一天/计算农历日期和日期的下一个农历月的第一天的日期。

功能dianaday(objdate){

var I,跳跃= 0,温度= 0;

无功basedate =新的日期(1900,0,31);

无功补偿=(objdate - basedate) / 86400000;

this.daycyl =偏移±40;

this.moncyl = 14;

为(i = 1900;I0;i++){

温度= lyeardays(我)

偏移量=温度;

this.moncyl = 12;

}

如果(偏移< 0){

偏移量=温度;

我--;

this.moncyl = 12;

}

this.year =我;

这yearcyl = i-1864;

飞跃=闰月(我); / /运行哪个月

this.isleap = false;

为(i = 1;I0;i++){

如果(飞跃> 0我= =(跳跃+ 1)这。IsLeap = = false){ / /月

我;this.isleap =真;温度= leapdays(本年);}

别的{

温度= monthdays(this.year,I);}

如果(这。IsLeap = =真我= =(跳跃+ 1))this.isleap = false; / /删除的飞跃

偏移量=温度;

如果(this.isleap = = false)这moncyl + +;

}

如果(= = 0跳跃> 0 i =跳跃+ 1)

如果(这。IsLeap){ this.isleap = false;}

别的{。IsLeap = true;--我;这moncyl;}。

如果(偏移量<0){偏移+ =温度;——我;这moncyl;}。

这个月=我;

这一天=偏移量+ 1;

}

1个月的日历日

功能solardays(Y,M){

如果(m=1)

返回((y = 4 = 0)(y % 100)!= 0)| |(% 400 = = 0))29:28);

其他的

返回(solarmonth {米});

}

记录和日期的阴历日。

功能calelement(来,smonth,日,周,1,1月,1天,IsLeap){

this.istoday = false;

日历

this.syear =来;

this.smonth = smonth;

this.sday =快乐;

this.week =周;

{月球}

this.lyear = 1;

this.lmonth = 1月;

this.lday = 1天;

this.isleap = IsLeap;

/节日记录

this.lunarfestival = ''; / /春节

this.solarfestival = ''; / /假期日历

this.solarterms = ''; / /节气

}

返回 / /第N个几天(从节气0 Xiaohan)

功能干(Y,N){

无功offdate =新的日期(31556925974.7 *(y-1900)+ sterminfo { }×60000)+ date.utc(1900,0,6,2,5));

返回(offdate.getutcdate())

}

保存y 1的相关信息。

var = 9;

var=0;

函数日历(y,m){

脂肪=MAT=0;

无功sdobj,ldobj、LY、LM、LD=1,LL,LX = 0,TMP1和TMP2;

VaR LDPOS =新阵(3);

var = 0;

无功firstlm = 0;

sdobj新=日期(Y,M,1); / /日期的一个月的第一天

this.length = solardays(Y,M); / /在一个月的日历天数

this.firstweek =(sdobj。getday); / /阳历的星期天月1

如果(((M + 1)= = 5){脂肪= sdobj.getday()}

如果(((M + 1)= = 6){垫= sdobj.getday()}

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

如果(LD = LX){

sdobj新=日期(Y、M、I + 1); / /日期的一个月的第一天

ldobj =新dianaday(sdobj); / /月

LY = ldobj.year; / /农历新年

LM = ldobj.month; / /月

LD = ldobj.day; / /太阴日

将ldobj.isleap; / /农历月

LX =我leapdays(LY):monthdays(LY,LM); / /这个月的最后一天

如果(= = 12){

如果(n = 0)firstlm = LM;

LDPOS { n + + + 1 = i-ld };

}

这{我} =新calelement(Y,M + 1,我1,nstr1 {(我+这个。第一周)% 7 }、LY、LM、LD + +);

如果((我+这个。第一周)% 7 = = 0){

这{我}。颜色='; / /星期日的颜色

}

}

/节气

TMP1 =干(Y、M×2)- 1;

TMP2 =干(Y,M * 2 + 1)- 1;

这{ TMP1 }。节气=个节气{ m×2 };

这{ TMP2 }。节气=个节气{ m×2 + 1 };

如果((这。第一周+ 12)% 7 = = 5)/黑色星期五

这{ 12 }。solarfestival + =黑色星期五;

如果(y = =泰M = = TM)这{ TD-1 }。今天= true; / /今天

}

用中文显示农历日期

功能cday(D){

VaR的;

开关(d){

案例10:

s =突破第十;

案例20:

二十;中断;

打破;

案例30:

三十;中断;

打破;

违约:

S = nstr2 { math.floor(D / 10)};

S = { 10 } nstr1 %;

}

返回(s);

}

VaR的CLD;

功能drawcld(SY,SM){

var =真;

var;

变量I,SD,s,大小;

CLD =新的日历(SY,SM);

gz.innerhtml ={+动物{(sy-4)% 12 } +}; / /农历新年

对于(i = 0;i < 42;i + +){

sobj = eval(高+我);

lobj = eval('ld +我);

sobj.classname =;

SD =我cld.firstweek;

如果(SD > 1 SD<CLD。长度){ / /日期

sobj.innerhtml = SD + 1;

如果(CLD {只},{今天)sobj.style.color =# 9900ff;} / /彩色今天

别的{ sobj.style.color = '';}

如果(CLD { } = = 1天SD,1){ / /显示农历月

lobj.innerhtml(CLD {只}。IsLeap=+飞跃:)++ CLD {只}。1月+七月(monthdays(CLD {只}。1,CLD { SD }。1月)= = 29 ':'大' + ');

}

别的{ lobj.innerhtml = cday(CLD {只}。1d);} / /根据农历

Var Slfw = SSFW = null;

S = { } solarfestival CLD的SD;

对于(VAR IPP = 0;IPP < lftv.length;IPP ++){ / /春节

如果(parseInt(lftv {等}。substr(0,2))=(CLD {只}。1月)){

如果(parseInt(lftv {等}。substr(2,4))=(CLD {只}。1 d)){

lobj .innerHTML = { } lftv IPP函数(5);

比叶重= { } lftv IPP函数(5);

}

}

如果(12 = =(CLD {只}。1月)){ / /确定除夕

如果(夜= =(CLD {只}。1 d)){ lobj .innerHTML =除夕;比叶重=除夕;}

}

}

对于(VAR IPP = 0;IPP < sftv.length;IPP ++){ / /假期日历

如果(parseInt(sftv {等}。substr(0,2))=(SM 1)){

如果(parseInt(sftv {等}。substr(2,4))=(SD 1)){

lobj .innerHTML = { } sftv IPP函数(5);

潜流湿地= sftv { } substr(5)等;

}

}

}

如果(= 5(SM + 1)){母亲节

如果(FAT=0){

如果(((SD 1)= = 7){ SSFW = 母亲节;lobj .innerHTML = 母亲节}

}

否则如果(FAT < 9){

如果((SD 1)=((7-fat)+ 8){ SSFW =)母亲节母亲节lobj .innerHTML = ;}

}

}

如果(= 6(SM + 1)){父亲节

如果(MAT = 0){

如果(((SD 1)= = 14){ SSFW =父亲节;lobj .innerHTML =父亲节}

}

否则如果(MAT < 9){

如果((SD 1)=((7-mat)+ 15){ SSFW =)父亲节;lobj .innerHTML =父亲节。

}

}

如果(s.length <= 0){ / /节气的颜色设置

S = { }节气CLD的SD;

如果(s.length > 0)= s.fontcolor('limegreen);

}

如果(s.length > 0){ lobj .innerHTML = S;比叶重= S;} / /节气

如果((Slfw!= null)(Ssfw!= NULL){

lobj .innerHTML =比叶重+/+潜流式人工湿地;

}

}

其他{日期

sobj.innerhtml =;

lobj.innerhtml =;

}

}

}

在下拉列表中选择日期 / /,调用自定义函数drawcld(),显示相关信息和农历

功能changecld(){

变量,m;

Y = CLD。SY。SelectedIndex + 1900;

M = cld.sm.selectedindex;

DrawCld(Y,M);

}

使用自定义变量保存当前系统日期

var =新日期();

无功即today.getfullyear();

VaR TM = today.getmonth();

VaR技术today.getdate();

/ /打开页面,在下拉列表中显示当前日期,并调用自定义函数drawcld(),显示相关信息和农历

函数初始(){

SelectedIndex = ty-1900 CLD。SY;

CLD。SM。SelectedIndex = TM;

DrawCld(TY,TM);

}





















公历





为(i = 1900;i + i);







为(i = 1;i + i);









白天















var GNUM;

对于(i = 0;i < 6;i + +){

document.write('');

对于(j = 0;j<7;j + +){

GNUM =我* 7 + J;

document.write(<字体ID = SD + GNUM +规模= 2 =黑体);

如果(J = = 0)document.write(颜色=红);

如果(J = = 6)document.write(颜色= # 000080);

document.write(标题=>);

}

document.write('');

}





















非常难得,有节日和节气,还有日历上的日历效果,希望大家能喜欢。