var solarMonth=new Array(31,28,31,30,31,30,31,31,30,31,30,31); 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('初','十','廿','卅'); //公历节日...... ...... function getJR(SY,SM,day) { SM = SM - 1; var str='';
var TF=true; var p1=p2=""; var i,sD,s,size; cld = new calendar(SY,SM); //str += ' 【'+Animals[(SY-4)%12]+'】'; //生肖 for(i=0;i<42;i++) { //sObj=eval('SD'+ i); //lObj=eval('LD'+ i); //sObj.className = ''; str = ''; sD = i - cld.firstWeek; if(sD>-1 && sD<cld.length) { //日期内 //sObj.innerHTML = sD+1;
//if(cld[sD].isToday){ sObj.style.color = '#9900FF';} //今日颜色 //else{sObj.style.color = '';} /*if(cld[sD].lDay==1){ //显示农历月 str += '<b>'+(cld[sD].isLeap?'闰':'') + cld[sD].lMonth + '月' + (monthDays(cld[sD].lYear,cld[sD].lMonth)==29?'小':'大')+'</b>'; } else{ str += cDay(cld[sD].lDay);} //显示农历日*/ var Slfw=Ssfw=null; s=cld[sD].solarFestival; for (var ipp=0;ipp<lFtv.length;ipp++){ //农历节日 if (parseInt(lFtv[ipp].substr(0,2))==(cld[sD].lMonth)){ if (parseInt(lFtv[ipp].substr(2,4))==(cld[sD].lDay)){ str =lFtv[ipp].substr(5); Slfw=lFtv[ipp].substr(5); } } if (12==(cld[sD].lMonth)){ //判断是否为除夕 if (eve==(cld[sD].lDay)){ str ="除夕";Slfw="除夕";} } } for (var ipp=0;ipp<sFtv.length;ipp++){ //公历节日 if (parseInt(sFtv[ipp].substr(0,2))==(SM+1)){ if (parseInt(sFtv[ipp].substr(2,4))==(sD+1)){ str =sFtv[ipp].substr(5); Ssfw=sFtv[ipp].substr(5); } } } if ((SM+1)==5){ //母亲节 if (fat==0){ if ((sD+1)==7){Ssfw="母亲节"; str ="母亲节"} } else if (fat<9){ if ((sD+1)==((7-fat)+8)){Ssfw="母亲节"; str ="母亲节"} } } if ((SM+1)==6){ //父亲节 if (mat==0){ if ((sD+1)==14){Ssfw="父亲节"; str ="父亲节"} } else if (mat<9){ if ((sD+1)==((7-mat)+15)){Ssfw="父亲节"; str ="父亲节"} } } if (s.length<=0){ //设置节气的颜色 s=cld[sD].solarTerms; if(s.length>0) s = s.fontcolor('limegreen'); } if(s.length>0) { str =s;Slfw=s;} //节气 if ((Slfw!=null)&&(Ssfw!=null)){ str =Slfw+"/"+Ssfw; }
var TF=true;
var p1=p2="";
var i,sD,s,size;
cld = new calendar(SY,SM);
GZ.innerHTML = ' 【'+Animals[(SY-4)%12]+'】'; //生肖
for(i=0;i<42;i++) {
sObj=eval('SD'+ i);
lObj=eval('LD'+ i);
sObj.className = '';
sD = i - cld.firstWeek;
if(sD>-1 && sD<cld.length) { //日期内
sObj.innerHTML = sD+1;
if(cld[sD].isToday){ sObj.style.color = '#9900FF';} //今日颜色
else{sObj.style.color = '';}
if(cld[sD].lDay==1){ //显示农历月
lObj.innerHTML = '<b>'+(cld[sD].isLeap?'闰':'') + cld[sD].lMonth + '月' + (monthDays(cld[sD].lYear,cld[sD].lMonth)==29?'小':'大')+'</b>';
}
else{lObj.innerHTML = cDay(cld[sD].lDay);} //显示农历日
var Slfw=Ssfw=null;
s=cld[sD].solarFestival;
for (var ipp=0;ipp<lFtv.length;ipp++){ //农历节日
if (parseInt(lFtv[ipp].substr(0,2))==(cld[sD].lMonth)){
if (parseInt(lFtv[ipp].substr(2,4))==(cld[sD].lDay)){
lObj.innerHTML=lFtv[ipp].substr(5);
Slfw=lFtv[ipp].substr(5);
}
}
if (12==(cld[sD].lMonth)){ //判断是否为除夕
if (eve==(cld[sD].lDay)){lObj.innerHTML="除夕";Slfw="除夕";}
}
}
for (var ipp=0;ipp<sFtv.length;ipp++){ //公历节日
if (parseInt(sFtv[ipp].substr(0,2))==(SM+1)){
if (parseInt(sFtv[ipp].substr(2,4))==(sD+1)){
lObj.innerHTML=sFtv[ipp].substr(5);
Ssfw=sFtv[ipp].substr(5);
}
}
}
if ((SM+1)==5){ //母亲节
if (fat==0){
if ((sD+1)==7){Ssfw="母亲节";lObj.innerHTML="母亲节"}
}
else if (fat<9){
if ((sD+1)==((7-fat)+8)){Ssfw="母亲节";lObj.innerHTML="母亲节"}
}
}
if ((SM+1)==6){ //父亲节
if (mat==0){
if ((sD+1)==14){Ssfw="父亲节";lObj.innerHTML="父亲节"}
}
else if (mat<9){
if ((sD+1)==((7-mat)+15)){Ssfw="父亲节";lObj.innerHTML="父亲节"}
}
}
if (s.length<=0){ //设置节气的颜色
s=cld[sD].solarTerms;
if(s.length>0) s = s.fontcolor('limegreen');
}
if(s.length>0) {lObj.innerHTML=s;Slfw=s;} //节气
if ((Slfw!=null)&&(Ssfw!=null)){
lObj.innerHTML=Slfw+"/"+Ssfw;
}
if(cld[sD].isToday)
alert(lObj.innerHTML);
}
else { //非日期
sObj.innerHTML = '';
lObj.innerHTML = '';
}
}
}运行一下那个例子,在drawCld中添加红色的那两行,再运行一下,然后你应该知道怎么做了
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 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('初','十','廿','卅');
//公历节日......
......
function getJR(SY,SM,day)
{
SM = SM - 1;
var str='';
var TF=true;
var p1=p2="";
var i,sD,s,size;
cld = new calendar(SY,SM);
//str += ' 【'+Animals[(SY-4)%12]+'】'; //生肖
for(i=0;i<42;i++) {
//sObj=eval('SD'+ i);
//lObj=eval('LD'+ i);
//sObj.className = '';
str = '';
sD = i - cld.firstWeek;
if(sD>-1 && sD<cld.length) { //日期内
//sObj.innerHTML = sD+1;
//if(cld[sD].isToday){ sObj.style.color = '#9900FF';} //今日颜色
//else{sObj.style.color = '';}
/*if(cld[sD].lDay==1){ //显示农历月
str += '<b>'+(cld[sD].isLeap?'闰':'') + cld[sD].lMonth + '月' + (monthDays(cld[sD].lYear,cld[sD].lMonth)==29?'小':'大')+'</b>';
}
else{ str += cDay(cld[sD].lDay);} //显示农历日*/
var Slfw=Ssfw=null;
s=cld[sD].solarFestival;
for (var ipp=0;ipp<lFtv.length;ipp++){ //农历节日
if (parseInt(lFtv[ipp].substr(0,2))==(cld[sD].lMonth)){
if (parseInt(lFtv[ipp].substr(2,4))==(cld[sD].lDay)){
str =lFtv[ipp].substr(5);
Slfw=lFtv[ipp].substr(5);
}
}
if (12==(cld[sD].lMonth)){ //判断是否为除夕
if (eve==(cld[sD].lDay)){ str ="除夕";Slfw="除夕";}
}
}
for (var ipp=0;ipp<sFtv.length;ipp++){ //公历节日
if (parseInt(sFtv[ipp].substr(0,2))==(SM+1)){
if (parseInt(sFtv[ipp].substr(2,4))==(sD+1)){
str =sFtv[ipp].substr(5);
Ssfw=sFtv[ipp].substr(5);
}
}
}
if ((SM+1)==5){ //母亲节
if (fat==0){
if ((sD+1)==7){Ssfw="母亲节"; str ="母亲节"}
}
else if (fat<9){
if ((sD+1)==((7-fat)+8)){Ssfw="母亲节"; str ="母亲节"}
}
}
if ((SM+1)==6){ //父亲节
if (mat==0){
if ((sD+1)==14){Ssfw="父亲节"; str ="父亲节"}
}
else if (mat<9){
if ((sD+1)==((7-mat)+15)){Ssfw="父亲节"; str ="父亲节"}
}
}
if (s.length<=0){ //设置节气的颜色
s=cld[sD].solarTerms;
if(s.length>0) s = s.fontcolor('limegreen');
}
if(s.length>0) { str =s;Slfw=s;} //节气
if ((Slfw!=null)&&(Ssfw!=null)){
str =Slfw+"/"+Ssfw;
}
if(sD+1==day)break;
}
else { //非日期
str = '';
}
}
return str;
}alert('2015, 2, 18: ' + getJR(2015, 2, 18));这个getJR,可以得到指定日期的节日累死了,好久没写js,都忘得差不多了
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>测试</title>
<script type="text/javascript">
<!--
var V = [//阳历
{date: "0101", name: "元旦节"},
{date: "0214", name: "情人节"},
{date: "0305", name: "学雷锋纪念日"},
{date: "0308", name: "妇女节"},
{date: "0312", name : "植树节"},
{date: "0401", name : "愚人节"},
{date: "0501", name : "劳动节"},
{date: "0504", name : "青年节"},
{date: "0601", name : "国际儿童节"},
{date: "0701", name : "中国GD诞辰"},
{date: "0801", name : "建军节"},
{date: "0910", name : "中国教师节"},
{date: "1001", name : "国庆节"},
{date: "1224", name : "平安夜"},
{date: "1225", name : "圣诞节"}
];function doIt()
{
var myDate = new Date();
var month = myDate.getMonth()+1;
var day = myDate.getDate(); var currentNum = parseInt(month.toString()+day.toString());//当前月日数
var tempNum, minNum=9999, minIndex;//临时数,最小数和最小数索引
for(var i=0;i<V.length;i++){
tempNum = Math.abs(parseInt(V[i].date) - currentNum);
if(tempNum < minNum){
minNum = tempNum;//只存最小数
minIndex = i;//数组索引
}
}
alert("最近节日:"+V[minIndex].date + V[minIndex].name );
}//-->
</script>
</head>
<body>
<input type="button" value="测试" onclick="doIt();" />
</body>
</html>
哥,还是你了解我啊,知道我想要什么但是算法还有点问题啊0101有个节日
0201也有一个节日今天是0129,但是返回的还是0101的节日,好伤脑筋啊,好费脑子啊,我想了一会儿头就大了
妹子昨天那个没仔细看,这个应该没问题了:
<!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" />
<title>测试</title>
<script type="text/javascript">
<!--
var V = [//阳历
{date: "0101", name: "元旦节"},
{date: "0214", name: "情人节"},
{date: "0305", name: "学雷锋纪念日"},
{date: "0308", name: "妇女节"},
{date: "0312", name : "植树节"},
{date: "0401", name : "愚人节"},
{date: "0501", name : "劳动节"},
{date: "0504", name : "青年节"},
{date: "0601", name : "国际儿童节"},
{date: "0701", name : "中国GD诞辰"},
{date: "0801", name : "建军节"},
{date: "0910", name : "中国教师节"},
{date: "1001", name : "国庆节"},
{date: "1224", name : "平安夜"},
{date: "1225", name : "圣诞节"}
];// 给日期类对象添加日期差方法,返回日期与diff参数日期的时间差,单位为天
Date.prototype.diff = function(date){
return (this.getTime() - date.getTime())/(24 * 60 * 60 * 1000);
}function doIt()
{
var myDate = new Date();
var month = myDate.getMonth()+1;
var day = myDate.getDate(); var currentNum = parseInt(month.toString()+day.toString());//当前月日数
var differenceVal, minNum=9999, minIndex;//临时数,最小数和最小数索引 for(var i=0;i<V.length;i++){
var holiday = new Date(myDate.getFullYear()+"/"+V[i].date.substr(0,2)+"/"+V[i].date.substr(2,2));//节假日
differenceVal = Math.abs(myDate.diff(holiday));
if(differenceVal < minNum){
minNum = differenceVal;//只存最小数
minIndex = i;//数组索引
}
}
alert("最近节日:"+V[minIndex].date + V[minIndex].name );
}
//-->
</script>
</head>
<body>
<input type="button" value="测试" onclick="doIt();" />
</body>
</html>
var V = [//阳历
{date: "0101", name: "元旦节"},
{date: "0214", name: "情人节"},
{date: "0305", name: "学雷锋纪念日"},
{date: "0308", name: "妇女节"},
{date: "0312", name : "植树节"},
{date: "0401", name : "愚人节"},
{date: "0501", name : "劳动节"},
{date: "0504", name : "青年节"},
{date: "0601", name : "国际儿童节"},
{date: "0701", name : "中国GD诞辰"},
{date: "0801", name : "建军节"},
{date: "0910", name : "中国教师节"},
{date: "1010", name : "国庆节"},
{date: "1224", name : "平安夜"},
{date: "1225", name : "圣诞节"}
];
var D = new Date('2015/06/25');
var n = ('0' + (D.getMonth() + 1)).slice(-2) + ('0' + D.getDate()).slice(-2);
var result = (function(){
var arr = [];
for(var i in V){
(n * 1 < V[i].date * 1) && arr.push(V[i]);
}
return arr.shift().name;
})();
console.info('离当前日期最近的节日为:' + result);
不好意思,突然想到一个问题,就是如果V中的数据不是按顺序排列的话,结果就不对了。修改如下:var V = [
{date: "1224", name : "平安夜"},
{date: "0101", name: "元旦节"},
{date: "0910", name : "中国教师节"},
{date: "0214", name: "情人节"},
{date: "0501", name : "劳动节"},
{date: "0305", name: "学雷锋纪念日"},
{date: "0308", name: "妇女节"},
{date: "0312", name : "植树节"},
{date: "0701", name : "中国GD诞辰"},
{date: "0401", name : "愚人节"},
{date: "0504", name : "青年节"},
{date: "0601", name : "国际儿童节"},
{date: "0801", name : "建军节"},
{date: "1010", name : "国庆节"},
{date: "1225", name : "圣诞节"},
{date: "1111", name : "光棍节"}
]; V.sort(function(a,b){return a.date < b.date ? -1 : 1;});//按date大小升序排列
// var D = new Date('2015/10/30');//获取指定日期的最近节日
var D = new Date();
var n = ('0' + (D.getMonth() + 1)).slice(-2) + ('0' + D.getDate()).slice(-2),k = 0;
for(var i in V) n * 1 > V[i].date * 1 && k++;
console.info('离当前日期最近的节日为:' + V.slice(k).shift().name);
废话不多说了,完整代码如下:需要下载calendar.js<!DOCTYPE>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
<script type="text/javascript" src="calendar.js"></script>
<style>
</style>
</head>
<body>
<div id="lunar"></div>
<div id="solar"></div>
</body>
<script type='text/javascript'>
var V =
[//公历
{date: "1224", name : "平安夜"},
{date: "0101", name: "元旦节"},
{date: "0910", name : "中国教师节"},
{date: "0214", name: "情人节"},
{date: "0501", name : "劳动节"},
{date: "0305", name: "学雷锋纪念日"},
{date: "0308", name: "妇女节"},
{date: "0312", name : "植树节"},
{date: "0701", name : "中国GD诞辰"},
{date: "0401", name : "愚人节"},
{date: "0504", name : "青年节"},
{date: "0601", name : "国际儿童节"},
{date: "0801", name : "建军节"},
{date: "1010", name : "国庆节"},
{date: "1225", name : "圣诞节"},
{date: "1111", name : "光棍节"}
];
var T =
[//农历
{date:"0101",name:"春节"},
{date:"0115",name:"元宵节"},
{date:"0505",name:"端午节"},
{date:"0815",name:"中秋节"},
{date:"0909",name:"重阳节"},
{date:"1208",name:"腊八节"},
{date:"1230",name:"除夕"}
]
function recently(V,T){
V = V || [],T = T || [],result = {};
V.sort(function(a,b){return a.date < b.date ? -1 : 1;});//按date大小升序排列
T.sort(function(a,b){return a.date < b.date ? -1 : 1;});//按date大小升序排列
var D = new Date(),y = D.getFullYear(),m = D.getMonth() + 1,d = D.getDate(); //获取最近的公历节日
var n = ('0' + m).slice(-2) + ('0' + d).slice(-2),k = 0;
for(var i in V) n * 1 > V[i].date * 1 && k++;
k = k >= V.length ? 0 : k;
result.gl = V.slice(k).shift();
//获取最近的农历节日
var nl = calendar.lunar2solar(y,m,d);
n = ('0' + nl.lMonth).slice(-2) + ('0' + nl.lDay).slice(-2),k = 0;
for(var i in T) n * 1 > T[i].date * 1 && k++;
k = k >= V.length ? 0 : k;
result.nl = T.slice(k).shift(); return result;
}
var o = recently(V,T);
document.getElementById('lunar').innerHTML = '离当前日期最近的节日(公历):' + o.gl.name;
document.getElementById('solar').innerHTML = '离当前日期最近的节日(农历):' + o.nl.name;
</script>
</html>