html⽇历页⾯节假⽇_JavaScript实现有农历和节⽓节假⽇的⽇
1
2
3
4
5
带农历的⽇历
6
7
8
9
10
11
12
13
14 bordercolorlight="#EEEEEE">
15
16
17
19
20 for (i = 1900; i < 2050; i++) document.write('' +i);21
22 年
23
24 for (i = 1; i < 13; i++) document.write('' +i);25
26 ⽉
27
28
29
30
31
32
33
34
35
36
37
38
39
40 vargNum;41 for (i = 0; i < 6; i++) {42 document.write('
');43 for (j = 0; j < 7; j++) {44 gNum = i * 7 +j;45 document.write(' ');53 }54 document.write('');55 }56
57
58
59
60
61
62
63
64
65 var lunarInfo = newArray(66 0x04bd8, 0x04ae0, 0x0a570, 0x054d5, 0x0d260, 0x0d950, 0x16554, 0x056a0,
0x09ad0, 0x055d2,67 0x04ae0, 0x0a5b6, 0x0a4d0, 0x0d250, 0x1d255, 0x0b540, 0x0d6a0, 0x0ada2, 0x095b0,
0x14977,68 0x04970, 0x0a4b0, 0x0b4b5, 0x06a50, 0x06d40, 0x1ab54, 0x02b60, 0x09570, 0x052f2, 0x04970,69
0x06566, 0x0d4a0, 0x0ea50, 0x06e95, 0x05ad0, 0x02b60, 0x186e3, 0x092e0, 0x1c8d7, 0x0c950,70 0x0d4a0,
0x1d8a6, 0x0b550, 0x056a0, 0x1a5b4, 0x025d0, 0x092d0, 0x0d2b2, 0x0a950, 0x0b557,71 0x06ca0, 0x0b550,
0x15355, 0x04da0, 0x0a5d0, 0x14573, 0x052d0, 0x0a9a8, 0x0e950, 0x06aa0,72 0x0aea6, 0x0ab50, 0x04b60,
0x0aae4, 0x0a570, 0x05260, 0x0f263, 0x0d950, 0x05b57, 0x056a0,73 0x096d0, 0x04dd5, 0x04ad0, 0x0a4d0,
0x0d4d4, 0x0d250, 0x0d558, 0x0b540, 0x0b5a0, 0x195a6,74 0x095b0, 0x049b0, 0x0a974, 0x0a4b0, 0x0b27a,
0x06a50, 0x06d40, 0x0af46, 0x0ab60, 0x09570,75 0x04af5, 0x04970, 0x064b0, 0x074a3, 0x0ea50, 0x06b58,
0x055c0, 0x0ab60, 0x096d5, 0x092e0,76 0x0c960, 0x0d954, 0x0d4a0, 0x0da50, 0x07552, 0x056a0, 0x0abb7,
0x025d0, 0x092d0, 0x0cab5,77 0x0a950, 0x0b4a0, 0x0baa4, 0x0ad50, 0x055d9, 0x04ba0, 0x0a5b0, 0x15176,
0x052b0, 0x0a930,78 0x07954, 0x06aa0, 0x0ad50, 0x05b52, 0x04b60, 0x0a6e6, 0x0a4e0, 0x0d260, 0x0ea65,
0x0d530,79 0x05aa0, 0x076a3, 0x096d0, 0x04bd7, 0x04ad0, 0x0a4d0, 0x1d0b6, 0x0d250, 0x0d520, 0x0dd45,80
0x0b5a0, 0x056d0, 0x055b2, 0x049b0, 0x0a577, 0x0a4b0, 0x0aa50, 0x1b255, 0x06d20, 0x0ada0)81
82 var solarMonth = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);83 var Animals = new Array("⿏", "⽜", "虎", "兔", "龙", "蛇", "马", "⽺", "猴", "鸡", "狗", "猪");84 var solarTerm = new Array("⼩寒", "⼤寒", "⽴春", "⾬⽔", "惊蛰", "春分", "清明", "⾕⾬", "⽴夏", "⼩满", "芒种", "夏⾄", "⼩暑", "⼤暑", "⽴秋", "处暑", "⽩露", "秋分", "寒露", "霜降", "⽴冬", "⼩雪", "⼤雪", "冬⾄");85 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);86 var nStr1 = new Array('⽇', '⼀', '⼆', '三', '四', '五', '六', '七', '⼋', '九', '⼗');87 var nStr2 = new Array('初', '⼗', '廿',
'卅');88 //公历节⽇
89 var sFtv = newArray(90 "0101 元旦",91 "0214 情⼈节",92 "0308 妇⼥节",93 "0312 植树节",94 "0315 消费者权益⽇",95 "0401 愚⼈节",96 "0501 劳动节",97 "0504 青年节",98 "0512 护⼠节",99 "0601 ⼉童节",100 "0701 建党节",101 "0801 建军节",102 "0910 教师节",103 "0928 孔⼦诞⾠",104 "1001 国庆节",105 "1006 ⽼⼈节",106 "1024 联合国⽇",107 "1224 平安夜",108 "1225 圣诞节")109 //农历节⽇
110 var lFtv = newArray(111 "0101 春节",112 "0115 元宵节",113 "0505 端午节",114 "0707 七⼣情⼈节",115 "0715 中元节",116 "0815 中秋节",117 "0909 重阳节",118 "1208 腊⼋节",119 "1224 ⼩年")120 //返回农历y年的总天数
121 functionlYearDays(y) {122 var i, sum = 348;123 for (i = 0x8000; i > 0x8; i >>= 1)sum += (lunarInfo[y - 1900] & i) ? 1 : 0;124 return (sum +leapDays(y));125 }126 //返回农历y年闰⽉的天数
127 functionleapDays(y) {128 if (leapMonth(y)) return ((lunarInfo[y - 1900] & 0x10000) ? 30 : 29);129 else return (0);130 }131 //判断y年的农历中那个⽉是闰⽉,不是闰⽉返回0
132 functionleapMonth(y) {133 return (lunarInfo[y - 1900] & 0xf);134 }135 //返回农历y年m⽉的总天数
136 functionmonthDays(y, m) {137 return ((lunarInfo[y - 1900] & (0x10000 >> m)) ? 30 : 29);138 }139 //算出当前⽉第⼀天的农历⽇期和当前农历⽇期下⼀个⽉农历的第⼀天⽇期
140 functionDianaday(objDate) {141 var i, leap = 0, temp = 0;142 var baseDate = new Date(1900, 0, 31);143 var offset = (objDate - baseDate) / 86400000;144 this.dayCyl = offset + 40;Cyl = 14;146 for (i = 1900; i < 2050 && offset > 0; i++) {147 temp =lYearDays(i)148 offset -=temp;Cyl += 12;150 }151 if (offset < 0) {152 offset
+=temp;153 i--;Cyl -= 12;155 }ar =i;arCyl = i - 1864;158 leap = leapMonth(i); //闰哪个⽉
159 this.isLeap = false;160 for (i = 1; i < 13 && offset > 0; i++) {161 if (leap > 0 && i == (leap + 1) && this.isLeap == false) { //闰⽉
162 --i; this.isLeap = true; temp = ar);163 }164 else{165 temp = ar, i);166 }167 if (this.isLeap == true && i == (leap + 1)) this.isLeap = false; //解除闰⽉
168 offset -=temp;169 if (this.isLeap == false) Cyl++;170 }171 if (offset == 0 && leap > 0 && i == leap + 1)172 if (this.isLeap) { this.isLeap = false; }173 else { this.isLeap = true; --i; --Cyl; }174 if (offset < 0) { offset += temp; --i; --Cyl; }h =i;176 this.day = offset + 1;177 }178 //返回公历y年m+1⽉的天数
179 functionsolarDays(y, m) {180 if (m == 1)181 return (((y % 4 == 0) && (y % 100 != 0) || (y % 400 == 0)) ? 29 :
28);182 else
183 return(solarMonth[m]);184 }185 //记录公历和农历某天的⽇期
186 functioncalElement(sYear, sMonth, sDay, week, lYear, lMonth, lDay, isLeap) {187 this.isToday = false;188 //公历
189 this.sYear =sYear;190 this.sMonth =sMonth;191 this.sDay =sDay;192 this.week =week;193 //农历
194 this.lYear =lYear;195 this.lMonth =lMonth;196 this.lDay =lDay;197 this.isLeap =isLeap;198 //节⽇记录
199 this.lunarFestival = ''; //农历节⽇
200 this.solarFestival = ''; //公历节⽇
201 this.solarTerms = ''; //节⽓
202 }203 //返回某年的第n个节⽓为⼏⽇(从0⼩寒起算)
204 functionsTerm(y, n) {205 var offDate = new Date((31556925974.7 * (y - 1900) + sTermInfo[n] * 60000) +
Date.UTC(1900, 0, 6, 2, 5));206 UTCDate())207 }208 //保存y年m+1⽉的相关信息
209 var fat = mat = 9;210 var eve = 0;211 functioncalendar(y, m) {212 fat = mat = 0;213 var sDObj, lDObj, lY, lM, lD = 1, lL, lX = 0, tmp1, tmp2;214 var lDPOS = new Array(3);215 var n = 0;216 var firstLM = 0;217 sDObj = new Date(y, m, 1); //当⽉第⼀天的⽇期
218 this.length = solarDays(y, m); //公历当⽉天数
219 this.firstWeek = Day(); //公历当⽉1⽇星期⼏
220 if ((m + 1) == 5) { fat =Day() }221 if ((m + 1) == 6) { mat =Day() }222 for (var i = 0; i < this.length; i++) {223 if (lD >lX) {224 sDObj = new Date(y, m, i + 1); //当⽉第⼀天的⽇期
225 lDObj = new Dianaday(sDObj); //农历
226 lY = ar; //农历年
227 lM = h; //农历⽉
228 lD = lDObj.day; //农历⽇
229 lL = lDObj.isLeap; //农历是否闰⽉
230 lX = lL ? leapDays(lY) : monthDays(lY, lM); //农历当⽉最后⼀天
231 if (lM == 12) { eve =lX }232 if (n == 0) firstLM =lM;233 lDPOS[n++] = i - lD + 1;234 }235 this[i] = new calElement(y, m + 1, i + 1, nStr1[(i + this.firstWeek) % 7], lY, lM, lD++, lL);236 if ((i + this.firstWeek) % 7 == 0) {237 this[i].color = 'red'; //周⽇颜⾊
238 }239 }240 //节⽓
241 tmp1 = sTerm(y, m * 2) - 1;242 tmp2 = sTerm(y, m * 2 + 1) - 1;243 this[tmp1].solarTerms = solarTerm[m * 2];244
this[tmp2].solarTerms = solarTerm[m * 2 + 1];245 if ((this.firstWeek + 12) % 7 == 5) {//⿊⾊星期五
246 this[12].solarFestival += '⿊⾊星期五';247 }248 if (y == tY && m ==tM) {249 this[tD - 1].isToday = true; //今⽇
250 }251 }252 //⽤中⽂显⽰农历的⽇期
253 functioncDay(d) {254 vars;255 switch(d) {256 case 10:257 s = '初⼗';258 break;259 case 20:260 s = '⼆⼗';261 break;262 case 30:263 s = '三⼗';264 break;265 default:266 s = nStr2[Math.floor(d / 10)];267 //s += nStr1[d % 10];
268 s += nStr1[parseInt(d % 10)];269 break;270 }271 return(s);272 }273 //在表格中显⽰公历和农历的⽇期,以及相关节⽇javascript substr
274 varcld;275 functiondrawCld(SY, SM) {276 var TF = true;277 var p1 = p2 = "";278 vari, sD, s, size;279 cld = newcalendar(SY, SM);280 GZ.innerHTML = '                      【' + Animals[(SY - 4) % 12] + '】'; //⽣肖
281 for (i = 0; i < 42; i++) {282 sObj = eval('SD' +i);283 lObj = eval('LD' +i);284 sObj.className = '';285 sD = i -
cld.firstWeek;286 if (sD > -1 && sD < cld.length) { //⽇期内
287 sObj.innerHTML = sD + 1;288 if(cld[sD].isToday) {289 lor = '#9900FF'; //今⽇颜⾊
290 } else{291 lor = '';292 }293 if (cld[sD].lDay == 1) { //显⽰农历⽉
294 lObj.innerHTML = '' + (cld[sD].isLeap ? '闰' : '') + cld[sD].lMonth + '⽉' + (monthDays(cld[sD].lYear,
' + (cld[sD].isLeap ? '闰' : '') + cld[sD].lMonth + '⽉' + (monthDays(cld[sD].lYear,
cld[sD].lMonth) == 29 ? '⼩' : '⼤') + '';295 }296 else { //显⽰农历⽇
cld[sD].lMonth) == 29 ? '⼩' : '⼤') + '
297 lObj.innerHTML =cDay(cld[sD].lDay);298 }299 var Slfw = Ssfw = null;300 s =cld[sD].solarFestival;301 for (var ipp = 0; ipp < lFtv.length; ipp++) { //农历节⽇
302 if (parseInt(lFtv[ipp].substr(0, 2)) ===parseInt(cld[sD].lMonth)) {303 if (parseInt(lFtv[ipp].substr(2, 4))
===parseInt(cld[sD].lDay)) {304 lObj.innerHTML = lFtv[ipp].substr(5);305 Slfw = lFtv[ipp].substr(5);306 }307 }308 if (12
== (cld[sD].lMonth)) { //判断是否为除⼣
309 if (eve == (cld[sD].lDay)) { lObj.innerHTML = "除⼣"; Slfw = "除⼣"; }310 }311 }312 for (var ipp = 0; ipp < sFtv.length;
ipp++) { //公历节⽇
313 if (parseInt(sFtv[ipp].substr(0, 2)) == (SM + 1)) {314 if (parseInt(sFtv[ipp].substr(2, 4)) == (sD + 1)) {315
lObj.innerHTML = sFtv[ipp].substr(5);316 Ssfw = sFtv[ipp].substr(5);317 }318 }319 }320 if ((SM + 1) == 5) { //母亲节
321 if (fat == 0) {322 if ((sD + 1) == 7) { Ssfw = "母亲节"; lObj.innerHTML = "母亲节"}323 }324 else if (fat < 9) {325 if ((sD + 1) == ((7 - fat) + 8)) { Ssfw = "母亲节"; lObj.innerHTML = "母亲节"}326 }327 }328 if ((SM + 1) == 6) { //⽗亲节
329 if (mat == 0) {330 if ((sD + 1) == 14) { Ssfw = "⽗亲节"; lObj.innerHTML = "⽗亲节"}331 }332 else if (mat < 9) {333 if ((sD + 1) == ((7 - mat) + 15)) { Ssfw = "⽗亲节"; lObj.innerHTML = "⽗亲节"}334 }335 }336 if (s.length <= 0) { //设置节⽓的颜⾊
337 s =cld[sD].solarTerms;338 if (s.length > 0) s = s.fontcolor('limegreen');339 }340 if (s.length > 0) { l
Obj.innerHTML = s; Slfw = s; } //节⽓
341 if ((Slfw != null) && (Ssfw != null)) {342 lObj.innerHTML = Slfw + "/" +Ssfw;343 }344 }345 else { //⾮⽇期
346 sObj.innerHTML = '';347 lObj.innerHTML = '';348 }349 }350 }351 //在下拉列表中选择年⽉时,调⽤⾃定义函数drawCld(),显⽰公历和农历的相关信息
352 functionchangeCld() {353 vary, m;354 y = CLD.SY.selectedIndex + 1900;355 m =CLD.SM.selectedIndex;356
drawCld(y, m);357 }358 //⽤⾃定义变量保存当前系统中的年⽉⽇
359 var Today = newDate();360 var tY =FullYear();361 var tM =Month();362 var tD
=Date();363 //打开页时,在下拉列表中显⽰当前年⽉,并调⽤⾃定义函数drawCld(),显⽰公历和农历的相关信息
364 functioninitial() {365 CLD.SY.selectedIndex = tY - 1900;366 CLD.SM.selectedIndex =tM;367 drawCld(tY, tM);368 }369
370
371
372

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。