JS判断当天是否除夕节
因为要做一个日历控件,遇到国家法定节假日,日历颜色会改变,因为除夕是每年农历的最后一天,日期又不确定,不像春节1月1号,端午5月5号,中秋8月15,这些都有明确的日期,而除夕没有,只是最后一天,我如何在JS中判断当天是否是除夕,从而改变日历的颜色。
求大牛,求大神
[解决办法]
<body lang="zh" onload="initial()">
<!--内容 开始-->
<div class="CAL_wid">
<div class="CAL_LN"><div class="CAL_Az"></div><a href="javascript:void(0)" class="CAL_A1" onclick="pushBtm('YU')" title="上一年">上一年</a><a href="javascript:void(0)" class="CAL_A2" title="上一月" onclick="pushBtm('MU')">上一月</a><a href="javascript:void(0)" title="今日" class="CAL_A3" onclick="pushBtm('')"></a><a href="javascript:void(0)" class="CAL_A4" title="下一月" onclick="pushBtm('MD')">下一月</a><a href="javascript:void(0)" class="CAL_A5" title="下一年" onclick="pushBtm('YD')">下一年</a></div>
<!--日历内容区 开始-->
<div class="CAL_div">
<!--嵌入万年历代码 开始-->
<script language=javascript>
<!--
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 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*元旦",
"0214 情人节",
"0308 妇女节",
"0312 植树节",
"0315 消费者权益日",
"0401 愚人节",
"0501*劳动节",
"0504 青年节",
"0512 护士节",
"0601 儿童节",
"0701 建党节 香港回归纪念",
"0714 初伏",
"0724 中伏",
"0801 建军节",
"0813 末伏",
"0909 毛泽东逝世纪念",
"0910 教师节",
"0928 孔子诞辰",
"1001*国庆节",
"1006 老人节",
"1024 联合国日",
"1112 孙中山诞辰纪念",
"1220 澳门回归纪念",
"1225 圣诞节",
"1226 毛泽东诞辰纪念")
//农历节日 *表示放假日
var lFtv = new Array(
"0101*春节",
"0102*初二",
"0115 元宵节",
"0505*端午节",
"0707 七夕情人节",
"0715 中元节",
"0815*中秋节",
"0909 重阳节",
"1208 腊八节",
"1223 小年",
"0100*除夕")
var wFtv = new Array(
"0520 母亲节", "0630 父亲节")
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))
}
function leapDays(y) {
if(leapMonth(y)) return((lunarInfo[y-1900] & 0x10000)? 30: 29)
else return(0)
}
function leapMonth(y) {
return(lunarInfo[y-1900] & 0xf)
}
function monthDays(y,m) {
return( (lunarInfo[y-1900] & (0x10000>>m))? 30: 29 )
}
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 solarDays(y,m) {
if(m==1)
return(((y%4 == 0) && (y%100 != 0)
[解决办法]
(y%400 == 0))? 29: 28)
else
return(solarMonth[m])
}
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;
this.sMonth = sMonth;
this.sDay = sDay;
this.week = week;
this.lYear = lYear;
this.lMonth = lMonth;
this.lDay = lDay;
this.isLeap = isLeap;
this.cYear = cYear;
this.cMonth = cMonth;
this.cDay = cDay;
this.color = '';
this.lunarFestival = '';
this.solarFestival = '';
this.solarTerms = '';
}
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())
}
[解决办法]
<div id="detail" style="position:absolute;visibility:visible;"></div>
<FORM name=CLD id=CLD>
<table cellSpacing=0 cellPadding=0 align=center border=0>
<tbody>
<tr>
<td class=bs vAlign=top width=>
</td>
<td class=lb vAlign=top width=100%>
<table cellSpacing=0 cellPadding=0 width=100% border=0>
<tbody>
<tr bgColor=#F2F4F4>
<td height=30> <strong>当前查看:</strong><SPAN class=sm><font color=#333399>公历 </font>
<font style="font-SIZE: 9pt" color=#ffffff>
<SELECT onchange=changeCld() name="SY" id="SY">
<option>1900</option><option>1901</option><option>1902</option>
<option>1903</option><option>1904</option><option>1905</option>
<option>1906</option><option>1907</option><option>1908</option>
<option>1909</option><option>1910</option><option>1911</option>
<option>1912</option><option>1913</option><option>1914</option>
<option>1915</option><option>1916</option><option>1917</option>
<option>1918</option><option>1919</option><option>1920</option>
<option>1921</option><option>1922</option><option>1923</option>
<option>1924</option><option>1925</option><option>1926</option>
<option>1927</option><option>1928</option><option>1929</option>
<option>1930</option><option>1931</option><option>1932</option>
<option>1933</option><option>1934</option><option>1935</option>
<option>1936</option><option>1937</option><option>1938</option>
<option>1939</option><option>1940</option><option>1941</option>
<option>1942</option><option>1943</option><option>1944</option>
<option>1945</option><option>1946</option><option>1947</option>
<option>1948</option><option>1949</option><option>1950</option>
<option>1951</option><option>1952</option><option>1953</option>
<option>1954</option><option>1955</option><option>1956</option>
<option>1957</option><option>1958</option><option>1959</option>
<option>1960</option><option>1961</option><option>1962</option>
<option>1963</option><option>1964</option><option>1965</option>
<option>1966</option><option>1967</option><option>1968</option>
<option>1969</option><option>1970</option><option>1971</option>
<option>1972</option><option>1973</option><option>1974</option>
<option>1975</option><option>1976</option><option>1977</option>
<option>1978</option><option>1979</option><option>1980</option>
<option>1981</option><option>1982</option><option>1983</option>
<option>1984</option><option>1985</option><option>1986</option>
<option>1987</option><option>1988</option><option>1989</option>
<option>1990</option><option>1991</option><option>1992</option>
<option>1993</option><option>1994</option><option>1995</option>
<option>1996</option><option>1997</option><option>1998</option>
<option>1999</option><option>2000</option><option>2001</option>
<option>2002</option><option>2003</option><option>2004</option>
<option>2005</option><option>2006</option><option>2007</option>
<option selected>2008</option>
<option>2009</option><option>2010</option><option>2011</option>
<option>2012</option><option>2013</option><option>2014</option>
<option>2015</option><option>2016</option><option>2017</option>
<option>2018</option><option>2019</option><option>2020</option>
<option>2021</option><option>2022</option><option>2023</option>
<option>2024</option><option>2025</option><option>2026</option>
<option>2027</option><option>2028</option><option>2029</option>
<option>2030</option><option>2031</option><option>2032</option>
<option>2033</option><option>2034</option><option>2035</option>
<option>2036</option><option>2037</option><option>2038</option>
<option>2039</option><option>2040</option><option>2041</option>
<option>2042</option><option>2043</option><option>2044</option>
<option>2045</option><option>2046</option><option>2047</option>
<option>2048</option><option>2049</option>
</SELECT>
</font>
<font color=#333399>年 </font>
<font style="font-size: 9pt" color=#ffffff>
<select onchange="changeCld()" name=SM id="SM">
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
<option>5</option>
<option>6</option>
<option>7</option>
<option>8</option>
<option>9</option>
<option>10</option>
<option>11</option>
<option>12</option>
</select>
</font></SPAN><font style="font-SIZE: 9pt" color=#ffffff></font><SPAN class=sm><font color=#333399>月</font></font><font class=sm id=GZ><font color=#333399> 农历戊子年 </font><SPAN class=smlb><font color=#0099ff> 【</SPZN><SPAN class=smlb>鼠</SPAN><SPAN class=smlb>】</SPAN></font></SPAN></font><font color=#333399> </font></SPAN></td></tr></TBODY></table>
<table cellSpacing=1 cellPadding=0 width="100%" border=0>
<TBODY>
<tr>
<td vAlign=bottom>
<table cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<tr>
<td>
<table cellSpacing=1 cellPadding=0 width=100% align=center border=0>
<TBODY>
<tr>
<td class=ch align=middle height=40>
<table height="40" cellSpacing=3 cellPadding=0 width=100% border=0>
<TBODY>
<tr class=sunday align=middle>
<td width=57 class="weekend_ms">日</td>
<td width=57>一</td>
<td width=57>二</td>
<td width=57>三 </td>
<td width=57>四</td>
<td width=57>五</td>
<td width=57 class="weekend_ms">六</td>
</tr></TBODY></table></td></tr>
<SCRIPT language=JavaScript><!--
var gNum
for(i=0;i<6;i++) {
document.write(' <tr><td align=middle bgColor=#fafbfb height=40><table class="cal_day_NO" cellSpacing=1 cellPadding=0><TBODY><tr align=middle> ')
for(j=0;j<7;j++) {
gNum = i*7+j
document.write('<td align="center" id="SD' + gNum +'" onMouseOver="mOvr(event, ' + gNum +')" onMouseOut="mOut(event)" width="57" style="BACKGROUND: none transparent scroll repeat 0% 0%; cursor : default; COLOR: #ff5f08" TITLE=""')
if(j == 0){
document.write(' class="aorange"')
}else if(j == 6){
if(i%2==1) document.write(' class="aorange"')
else document.write(' class="agreen"')
}else{
document.write(' class="one"')
}
document.write(' TITLE=""> </td>')
}
document.write('</tr></table></td></tr><tr><td height="20" align="middle" bgcolor="#F3F5F8"><table class="cal_day_jr" cellSpacing=1 cellPadding=0><TBODY><tr align="center"> ')
for(j=0;j<7;j++) {
gNum = i*7+j
document.write('<td align="center" id="LD' + gNum +'" onMouseOver="mOvr(event,' + gNum +')" onMouseOut="mOut()" width="57" class="bs" TITLE="" style="BACKGROUND: none transparent scroll repeat 0% 0%; cursor : default; COLOR: #666666"> </td>')
}
document.write('</tr></table></td></tr>')
}
//--></SCRIPT>
</tbody></table></td></tr></tbody></table></td></tr></tbody></table></td>
<td valign=top></td></tr></form></tbody></table>
<!--嵌入万年历代码 结束-->
</div>
<!--日历内容区 结束-->
</div>
</body>
[解决办法]
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js" type="text/javascript"></script>
<script type="text/javascript">
//------------------- Begin ----------------------
CalendarHelper={};
CalendarHelper.GetCNDate = function (D) {
var CalendarData = new Array(100);
var madd = new Array(12);
var tgString = "甲乙丙丁戊己庚辛壬癸";
var dzString = "子丑寅卯辰巳午未申酉戌亥";
var numString = "一二三四五六七八九十";
var monString = "正二三四五六七八九十冬腊";
var weekString = "日一二三四五六";
var sx = "鼠牛虎兔龙蛇马羊猴鸡狗猪";
var cYear, cMonth, cDay, TheDate;
CalendarData = new Array(0xA4B, 0x5164B, 0x6A5, 0x6D4, 0x415B5, 0x2B6, 0x957, 0x2092F, 0x497, 0x60C96, 0xD4A, 0xEA5, 0x50DA9, 0x5AD, 0x2B6, 0x3126E, 0x92E, 0x7192D, 0xC95, 0xD4A, 0x61B4A, 0xB55, 0x56A, 0x4155B, 0x25D, 0x92D, 0x2192B, 0xA95, 0x71695, 0x6CA, 0xB55, 0x50AB5, 0x4DA, 0xA5B, 0x30A57, 0x52B, 0x8152A, 0xE95, 0x6AA, 0x615AA, 0xAB5, 0x4B6, 0x414AE, 0xA57, 0x526, 0x31D26, 0xD95, 0x70B55, 0x56A, 0x96D, 0x5095D, 0x4AD, 0xA4D, 0x41A4D, 0xD25, 0x81AA5, 0xB54, 0xB6A, 0x612DA, 0x95B, 0x49B, 0x41497, 0xA4B, 0xA164B, 0x6A5, 0x6D4, 0x615B4, 0xAB6, 0x957, 0x5092F, 0x497, 0x64B, 0x30D4A, 0xEA5, 0x80D65, 0x5AC, 0xAB6, 0x5126D, 0x92E, 0xC96, 0x41A95, 0xD4A, 0xDA5, 0x20B55, 0x56A, 0x7155B, 0x25D, 0x92D, 0x5192B, 0xA95, 0xB4A, 0x416AA, 0xAD5, 0x90AB5, 0x4BA, 0xA5B, 0x60A57, 0x52B, 0xA93, 0x40E95);
madd[0] = 0;
madd[1] = 31;
madd[2] = 59;
madd[3] = 90;
madd[4] = 120;
madd[5] = 151;
madd[6] = 181;
madd[7] = 212;
madd[8] = 243;
madd[9] = 273;
madd[10] = 304;
madd[11] = 334;
function GetBit(m, n) {
return (m >> n) & 1;
}
function e2c() {
TheDate = (arguments.length != 3) ? new Date() : new Date(arguments[0], arguments[1], arguments[2]);
var total, m, n, k;
var isEnd = false;
var tmp = TheDate.getYear();
if (tmp < 1900) {
tmp += 1900;
}
total = (tmp - 1921) * 365 + Math.floor((tmp - 1921) / 4) + madd[TheDate.getMonth()] + TheDate.getDate() - 38;
if (TheDate.getYear() % 4 == 0 && TheDate.getMonth() > 1) {
total++;
}
for (m = 0; ; m++) {
k = (CalendarData[m] < 0xfff) ? 11 : 12;
for (n = k; n >= 0; n--) {
if (total <= 29 + GetBit(CalendarData[m], n)) {
isEnd = true; break;
}
total = total - 29 - GetBit(CalendarData[m], n);
}
if (isEnd) break;
}
cYear = 1921 + m;
cMonth = k - n + 1;
cDay = total;
if (k == 12) {
if (cMonth == Math.floor(CalendarData[m] / 0x10000) + 1) {
cMonth = 1 - cMonth;
}
if (cMonth > Math.floor(CalendarData[m] / 0x10000) + 1) {
cMonth--;
}
}
}
function GetcDateString() {
var tmp = "";
tmp += tgString.charAt((cYear - 4) % 10);
tmp += dzString.charAt((cYear - 4) % 12);
tmp += "(";
tmp += sx.charAt((cYear - 4) % 12);
tmp += ")年 ";
if (cMonth < 1) {
tmp += "(闰)";
tmp += monString.charAt(-cMonth - 1);
} else {
tmp += monString.charAt(cMonth - 1);
}
tmp += "月";
tmp += (cDay < 11) ? "初" : ((cDay < 20) ? "十" : ((cDay < 30) ? "廿" : "三十"));
if (cDay % 10 != 0
[解决办法]
cDay == 10) {
tmp += numString.charAt((cDay - 1) % 10);
}
return tmp;
}
function GetLunarDay(solarYear, solarMonth, solarDay) {
//solarYear = solarYear<1900?(1900+solarYear):solarYear;
if (solarYear < 1921
[解决办法]
solarYear > 2020) {
return "";
} else {
solarMonth = (parseInt(solarMonth) > 0) ? (solarMonth - 1) : 11;
e2c(solarYear, solarMonth, solarDay);
return GetcDateString();
}
}
var yy = D.getFullYear();
var mm = D.getMonth() + 1;
var dd = D.getDate();
var ww = D.getDay();
var ss = parseInt(D.getTime() / 1000);
if (yy < 100) yy = "19" + yy;
return GetLunarDay(yy, mm, dd);
};
CalendarHelper.GetAddDay = function (D, v) {
var LSTR_ndate = D;
var LSTR_Year = LSTR_ndate.getYear();
var LSTR_Month = LSTR_ndate.getMonth();
var LSTR_Date = LSTR_ndate.getDate();
//处理
var uom = new Date(LSTR_Year, LSTR_Month, LSTR_Date);
uom.setDate(uom.getDate() + v); //取得系统时间的前一天,重点在这里,负数是前几天,正数是后几天
return uom;
}
//是否除夕
CalendarHelper.IsLastDayBeforeNewYearOfCN = function (D) {
var strCurrDay = CalendarHelper.GetCNDate(D);
var strNextDay = CalendarHelper.GetCNDate(CalendarHelper.GetAddDay(D, 1));
//alert(strCurrDay+","+strNextDay);
return strCurrDay.split('年')[0] != strNextDay.split('年')[0];
};
//是否春节
CalendarHelper.IsNewYearOfCN = function (D) {
var strCurrDay = CalendarHelper.GetCNDate(D);
var strPrevDay = CalendarHelper.GetCNDate(CalendarHelper.GetAddDay(D, -1));
//alert(strCurrDay+","+strPrevDay);
return strCurrDay.split('年')[0] != strPrevDay.split('年')[0];
};
//------------------- End ----------------------
var d1 = new Date();
var d2 = new Date(2013, 1, 9); //注:此处相当于2013年2月9号
var d3 = new Date(2013, 1, 10);
var result = GetResult(d1) + GetResult(d2) + GetResult(d3);
alert(result);
function GetResult(D) {
var y = D.getFullYear();
var m = D.getMonth() + 1;
var dd = D.getDate();
var str = y + "年" + m + "月" + dd + "日";
var isR = CalendarHelper.IsLastDayBeforeNewYearOfCN(D);
var isN = CalendarHelper.IsNewYearOfCN(D);
return "日期:"+str+","+ (isR?"是":"不是") + "除夕" + "," + (isN?"是":"不是") + "春节\n\n" ;
}
</script>
</head>
<body>
</body>
</html>