向高手求助!

秀HAPPY 2010-01-04 11:38:09
最近需要一个可以生成阴历的日历控件,请各位高手指点一下!最好可以有源代码,小女子在此谢谢了!
...全文
193 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
jinling4388 2010-01-06
  • 打赏
  • 举报
回复
每天回帖即可获得10分可用分!
秀HAPPY 2010-01-06
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 xuhuanchao 的回复:]
http://blog.csdn.net/xuhuanchao/archive/2009/11/23/4857796.aspx

csdn的网址
[/Quote]

不错,谢谢了哦!一会给你返分!
秀HAPPY 2010-01-06
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 q331464542 的回复:]
代码太多
  发布不了
[/Quote]

不是说了吗?我们公司现在只可以上CSDN呀!要是能搜,我也就不在这问了呀!不过还是要谢谢你呀!私下加你QQ吧!交个朋友!
wenjjing2lianee 2010-01-05
  • 打赏
  • 举报
回复
错过了,路过
风过无痕1110 2010-01-05
  • 打赏
  • 举报
回复
百度上搜
秀HAPPY 2010-01-05
  • 打赏
  • 举报
回复
是没给我发完吗?没有结尾呀!不能用呀!
亲努力啊 2010-01-05
  • 打赏
  • 举报
回复
//农历节日
for(i in lFtv)
if(lFtv[i].match(/^(\d{2})(.{2})([\s\*])(.+)$/)) {
tmp1=Number(RegExp.$1)-firstLM;
if(tmp1==-11) tmp1=1;
if(tmp1 >=0 && tmp1<n) {
tmp2 = lDPOS[tmp1] + Number(RegExp.$2) -1;
if( tmp2 >= 0 && tmp2<this.length && this[tmp2].isLeap!=true) {
this[tmp2].lunarFestival += RegExp.$4;
}
}
}
//今日
// if(y==tY && m==tM) this[tD-1].isToday = true;
}

/*********************************************
* 功能:构造一个日历控件
* 参数:curYear - 当前年
* curMonth - 当前月
* curDay - 当前日
**********************************************/
var cld;
function calendar(curYear,curMonth,curDay)
{
var monthDays = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
var weekNames = new Array("星期日","星期一","星期二","星期三","星期四","星期五","星期六");
var monthNames = new Array("01月","02月","03月","04月","05月","06月","07月","08月","09月","10月","11月","12月");
var minYear = 1900 // Minimum year
var maxYear = 2099 // Maximum year

//检查年份
if (curYear < minYear) curYear = minYear
if (curYear > maxYear) curYear = maxYear

//检查月份
if (curMonth < 1) curMonth = 1
if (curMonth > 12) curMonth = 12
//修正小于10的月份为两位数,前面补0
if(curMonth<10 && new String(curMonth).length==1)
{
curMonth="0"+curMonth;
}

//判断是否为润月
if (((curYear % 4 == 0) && (curYear % 100 != 0)) || (curYear % 400 == 0)) monthDays[1] = 29;
//取得当前月份的最大日期
var maxDay = monthDays[curMonth-1];

//检查日期
if (curDay<1) curDay=1
if (curDay>maxDay) curDay=maxDay
//修正小于10的月份为两位数,前面补0
if(curDay<10 && new String(curDay).length==1)
{
curDay="0"+curDay;
}

var firstDay = new Date(curYear,curMonth-1,1);//用当前年月的第一天构造Date对象
var startWeek = firstDay.getDay();//取得当前年月的第一天是星期几

cld = new calendar1(curYear,curMonth-1);//定义显示农历详细资料的对象

var str = '<table width="280" border="0" cellspacing="0" cellpadding="1" bgcolor="#0080FF">';
str=str +'<tr><td><table width="100%" border="0" cellspacing="1" cellpadding="1" bgcolor="Silver">';
//输出年月选择框
str=str +'<tr><td height="30" colspan="7" align="center" bgcolor="#C8E3FF">';
str=str + '<input type="button" onclick="clearDate();" name="btnClear" title="清除日期" value="1" style="font-family:Marlett;font-size:12px;cursor:hand;">';
str=str + ' <input type="button" onclick=calendar(document.all.selYear.value-1,"' + curMonth + '","' + curDay + '") name="btnPreMonth" title="上一年" value="5" style="font-family:Marlett;font-size:12px;cursor:hand;">';
str=str + '<input type="button" onclick=calendar(eval(document.all.selYear.value)+1,"' + curMonth + '","' + curDay + '") name="btnNextMonth" title="下一年" value="6" style="font-family:Marlett;font-size:12px;cursor:hand;"> ';
str=str + '<select name="selYear" onchange=calendar(this.value,"' + curMonth + '","' + curDay + '")>';
for (i=minYear;i<=maxYear;i++)
{
if (i==curYear)
{
str=str + "<option value='" + i + "' selected>" + i;
}else
{
str=str + "<option value='" + i + "'>" + i;
}
}
str=str + '</select> ';
str=str + '<select name="selMonth" onchange=calendar("' + curYear + '",this.value,"' + curDay + '")>';
for (i=1;i<=12;i++)
{
if(i<10)
{
i="0"+i
}
if (i==curMonth)
{
str=str + "<option value='" + i + "' selected>" + i+"月";
}else
{
str=str + "<option value='" + i + "'>" + i +"月";
}
}
str=str + '</select> ';
str=str + '<input type="button" onclick=calendar("' + curYear + '",document.all.selMonth.value-1,"' + curDay + '") name="btnPreYear" title="上一月" value="5" style="font-family:Marlett;font-size:12px;cursor:hand;">';
str=str + '<input type="button" onclick=calendar("' + curYear + '",eval(document.all.selMonth.value)+1,"' + curDay + '") name="btnNextYear" title="下一月" value="6" style="font-family:Marlett;font-size:12px;cursor:hand;">';
str=str + ' <input type="button" onclick="hiddenCalendar();" name="btnClose" title="关闭日历" value="r" style="font-family:Marlett;font-size:12px;cursor:hand;"> ';
str=str + '</td></tr>';

//输出星期
str=str +'<tr style="height:30;background-color:#0080FF;text-align:center;font-size:14pt;color:white;font-weight:bold;">';
str=str +'<td>日</td>';
str=str +'<td>一</td>';
str=str +'<td>二</td>';
str=str +'<td>三</td>';
str=str +'<td>四</td>';
str=str +'<td>五</td>';
str=str +'<td>六</td>';
str=str +'</tr>';

亲努力啊 2010-01-05
  • 打赏
  • 举报
回复
/*********************************************
* 功能:计算所给年份的农历总天数
* 参数:y - 所计算的年份
**********************************************/
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-1899]&0xf)==0xf? 30: 29);
else return(0);
}

// 返回农历y年闰哪个月 1-12 , 没闰返回 0
function leapMonth(y)
{
var lm = lunarInfo[y-1900] & 0xf;
return(lm==0xf?0:lm);
}

//返回农历 y年m月的总天数
function monthDays(y,m)
{
return( (lunarInfo[y-1900] & (0x10000>>m))? 30: 29 );
}

/*********************************************
* 功能:根据输入的公历日期算出农历日期
* 参数:objDate - 公历日期对象
**********************************************/
function Lunar(objDate)
{
var i, leap=0, temp=0;
var offset = (Date.UTC(objDate.getFullYear(),objDate.getMonth(),objDate.getDate()) - Date.UTC(1900,0,31))/86400000;

for(i=1900; i<2100 && offset>0; i++) { temp=lYearDays(i); offset-=temp; }

if(offset<0) { offset+=temp; i--; }

this.year = i;

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(offset==0 && leap>0 && i==leap+1)
if(this.isLeap)
{ this.isLeap = false; }
else
{ this.isLeap = true; --i; }

if(offset<0){ offset += temp; --i; }

this.month = i;
this.day = offset + 1;
}

//返回公历 y年某m+1月的天数
function solarDays(y,m)
{
if(m==1)
return(((y%4 == 0) && (y%100 != 0) || (y%400 == 0))? 29: 28);
else
return(solarMonth[m]);
}
//传入 offset 返回干支, 0=甲子
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; //公元年4位数字
this.sMonth = sMonth; //公元月数字
this.sDay = sDay; //公元日数字
this.week = week; //星期, 1个中文
//农历
this.lYear = lYear; //公元年4位数字
this.lMonth = lMonth; //农历月数字
this.lDay = lDay; //农历日数字
this.isLeap = isLeap; //是否为农历闰月?
//八字
this.cYear = cYear; //年柱, 2个中文
this.cMonth = cMonth; //月柱, 2个中文
this.cDay = cDay; //日柱, 2个中文
this.color = '';
this.lunarFestival = ''; //农历节日
this.solarFestival = ''; //公历节日
this.solarTerms = ''; //节气
}

//===== 某年的第n个节气为几日(从0小寒起算)
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());
}

// 中文日期
function cDay(d)
{
var s;
switch (d) {
case 10:
s = '初十'; break;
case 20:
s = '二十'; break;
break;
case 30:
s = '三十'; break;
break;
default :
s = nStr2[Math.floor(d/10)];
s += nStr1[d%10];
}
return(s);
}

/*
功能: 返回整个月的日期资料控件
参数:y - 年份
m - 月份
使用方式: OBJ = new calendar1(年,零起算月);
OBJ.length 返回当月最大日
OBJ.firstWeek 返回当月一日星期
由 OBJ[日期].属性名称 即可取得各项值
OBJ[日期].isToday 返回是否为今日 true 或 false
其他 OBJ[日期] 属性参见 calElement() 中的注解
*/
function calendar1(y,m)
{
var sDObj, lDObj, lY, lM, lD=1, lL, lX=0, tmp1, tmp2, tmp3;
var cY, cM, cD; //年柱,月柱,日柱
var lDPOS = new Array(3);
var n = 0;
var firstLM = 0;

sDObj = new Date(y,m,1,0,0,0,0); //当月一日日期

this.length = solarDays(y,m); //公历当月天数
this.firstWeek = sDObj.getDay(); //公历当月1日星期几

////////年柱 1900年立春后为庚子年(60进制36)
if(m<2) cY=cyclical(y-1900+36-1);
else cY=cyclical(y-1900+36);

var term2=sTerm(y,2); //立春日期

////////月柱 1900年1月小寒以前为 丙子月(60进制12)
var firstNode = sTerm(y,m*2) //返回当月「节」为几日开始
cM = cyclical((y-1900)*12+m+12);

//当月一日与 1900/1/1 相差天数
//1900/1/1与 1970/1/1 相差25567日, 1900/1/1 日柱为甲戌日(60进制10)
var dayCyclical = Date.UTC(y,m,1,0,0,0,0)/86400000+25567+10;

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

if(lD>lX) {
sDObj = new Date(y,m,i+1); //当月一日日期
lDObj = new Lunar(sDObj); //农历
lY = lDObj.year; //农历年
lM = lDObj.month; //农历月
lD = lDObj.day; //农历日
lL = lDObj.isLeap; //农历是否闰月
lX = lL? leapDays(lY): monthDays(lY,lM); //农历当月最后一天

if(n==0) firstLM = lM;
lDPOS[n++] = i-lD+1;
}

//依节气调整二月分的年柱, 以立春为界
if(m==1 && (i+1)==term2) cY=cyclical(y-1900+36);
//依节气月柱, 以「节」为界
if((i+1)==firstNode) cM = cyclical((y-1900)*12+m+13);
//日柱
cD = cyclical(dayCyclical+i);

//sYear,sMonth,sDay,week,
//lYear,lMonth,lDay,isLeap,
//cYear,cMonth,cDay
this[i] = new calElement(y, m+1, i+1, nStr1[(i+this.firstWeek)%7],
lY, lM, lD++, lL,
cY ,cM, cD );
}

//节气
tmp1=sTerm(y,m*2 )-1;
tmp2=sTerm(y,m*2+1)-1;
this[tmp1].solarTerms = solarTerm[m*2];
this[tmp2].solarTerms = solarTerm[m*2+1];
if(m==3) this[tmp1].color = 'red'; //清明颜色

//公历节日
for(i in sFtv)
if(sFtv[i].match(/^(\d{2})(\d{2})([\s\*])(.+)$/))
if(Number(RegExp.$1)==(m+1)) {
this[Number(RegExp.$2)-1].solarFestival += RegExp.$4;
}

//月周节日
for(i in wFtv)
if(wFtv[i].match(/^(\d{2})(\d)(\d)([\s\*])(.+)$/))
if(Number(RegExp.$1)==(m+1)) {
tmp1=Number(RegExp.$2);
tmp2=Number(RegExp.$3);
if(tmp1<5)
this[((this.firstWeek>tmp2)?7:0) + 7*(tmp1-1) + tmp2 - this.firstWeek].solarFestival += RegExp.$5;
else {
tmp1 -= 5;
tmp3 = (this.firstWeek+this.length-1)%7; //当月最后一天星期?
this[this.length - tmp3 - 7*tmp1 + tmp2 - (tmp2>tmp3?7:0) - 1 ].solarFestival += RegExp.$5;
}
}

亲努力啊 2010-01-05
  • 打赏
  • 举报
回复
<HTML>
<HEAD>
<TITLE>带阴历的日历控件</TITLE>
<META http-equiv="Content-Type" content="text/html">
</HEAD>

<BODY>
<div align="center" id="divCal"></div>
<DIV id="detail" style="Z-INDEX: 3; FILTER: shadow(color=#333333,direction=135); WIDTH: 140px; POSITION: absolute; HEIGHT: 120px"></DIV>
</BODY>
</HTML>

<script LANGUAGE="JavaScript" TYPE="text/javascript">
var inputDate; //日期输入框对象
var divPos;//控件日历控件位置的层的ID

/*****************************************************************************
日期资料
*****************************************************************************/
var lunarInfo=new Array(
0x4bd8,0x4ae0,0xa570,0x54d5,0xd260,0xd950,0x5554,0x56af,0x9ad0,0x55d2,
0x4ae0,0xa5b6,0xa4d0,0xd250,0xd255,0xb54f,0xd6a0,0xada2,0x95b0,0x4977,
0x497f,0xa4b0,0xb4b5,0x6a50,0x6d40,0xab54,0x2b6f,0x9570,0x52f2,0x4970,
0x6566,0xd4a0,0xea50,0x6a95,0x5adf,0x2b60,0x86e3,0x92ef,0xc8d7,0xc95f,
0xd4a0,0xd8a6,0xb55f,0x56a0,0xa5b4,0x25df,0x92d0,0xd2b2,0xa950,0xb557,
0x6ca0,0xb550,0x5355,0x4daf,0xa5b0,0x4573,0x52bf,0xa9a8,0xe950,0x6aa0,
0xaea6,0xab50,0x4b60,0xaae4,0xa570,0x5260,0xf263,0xd950,0x5b57,0x56a0,
0x96d0,0x4dd5,0x4ad0,0xa4d0,0xd4d4,0xd250,0xd558,0xb540,0xb6a0,0x95a6,
0x95bf,0x49b0,0xa974,0xa4b0,0xb27a,0x6a50,0x6d40,0xaf46,0xab60,0x9570,
0x4af5,0x4970,0x64b0,0x74a3,0xea50,0x6b58,0x5ac0,0xab60,0x96d5,0x92e0,
0xc960,0xd954,0xd4a0,0xda50,0x7552,0x56a0,0xabb7,0x25d0,0x92d0,0xcab5,
0xa950,0xb4a0,0xbaa4,0xad50,0x55d9,0x4ba0,0xa5b0,0x5176,0x52bf,0xa930,
0x7954,0x6aa0,0xad50,0x5b52,0x4b60,0xa6e6,0xa4e0,0xd260,0xea65,0xd530,
0x5aa0,0x76a3,0x96d0,0x4afb,0x4ad0,0xa4d0,0xd0b6,0xd25f,0xd520,0xdd45,
0xb5a0,0x56d0,0x55b2,0x49b0,0xa577,0xa4b0,0xaa50,0xb255,0x6d2f,0xada0,
0x4b63,0x937f,0x49f8,0x4970,0x64b0,0x68a6,0xea5f,0x6b20,0xa6c4,0xaaef,
0x92e0,0xd2e3,0xc960,0xd557,0xd4a0,0xda50,0x5d55,0x56a0,0xa6d0,0x55d4,
0x52d0,0xa9b8,0xa950,0xb4a0,0xb6a6,0xad50,0x55a0,0xaba4,0xa5b0,0x52b0,
0xb273,0x6930,0x7337,0x6aa0,0xad50,0x4b55,0x4b6f,0xa570,0x54e4,0xd260,
0xe968,0xd520,0xdaa0,0x6aa6,0x56df,0x4ae0,0xa9d4,0xa4d0,0xd150,0xf252,
0xd520);

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 元旦","0308 妇女节","0501 劳动节","0701 建党节","0801 建军节","0910 教师节","1001 国庆节");
var wFtv = new Array("0520 母亲节","0630 父亲节");
var lFtv = new Array("0101 春节","0115 元宵","0505 端午","0815 中秋","0100 除夕");

/*****************************************************************************
日期计算
*****************************************************************************/
秀HAPPY 2010-01-05
  • 打赏
  • 举报
回复
没有人帮忙了吗?自己给自己顶一下呀!
daisycool 2010-01-04
  • 打赏
  • 举报
回复
又来了一个小女子吗?
秀HAPPY 2010-01-04
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 dong502 的回复:]
快结贴 就可以马上返回分了 貌似
[/Quote]

不是吧!我还没有想要的答案呢?再说结帖也是给你们分,而我还是没有分呀!还有没有高手呀!快来帮忙呀!
dong502 2010-01-04
  • 打赏
  • 举报
回复
快结贴 就可以马上返回分了 貌似
秀HAPPY 2010-01-04
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 warison2008 的回复:]
http://www.mayaline.com/images/share/calendar.htm
[/Quote]

公司里上不去呀!我看不到内容呀!
道光2008 2010-01-04
  • 打赏
  • 举报
回复
http://www.mayaline.com/images/share/calendar.htm
秀HAPPY 2010-01-04
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 ld6886 的回复:]
网上搜一下
[/Quote]

我们公司现在只可以上CSDN呀!没办法了呀!所以上此地来寻求帮助呀!
ld6886 2010-01-04
  • 打赏
  • 举报
回复
网上搜一下
ld6886 2010-01-04
  • 打赏
  • 举报
回复
网上搜一下
秀HAPPY 2010-01-04
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 nihaozhangchao 的回复:]
http://download.csdn.net/source/667701
[/Quote]

还要花分呀!我可是把所有的分都放在这里了呀!下不了怎么办呀!有没有别的办法呢?
加载更多回复(1)

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧