后台代码:
#region 生成某年某月的日历,代码是去掉<table>标记的部分
/// <summary>
/// 取某天的农历日期
/// </summary>
/// <param name="year"></param>
/// <param name="month"></param>
/// <param name="day"></param>
/// <returns></returns>
public static string GetNongliRiqi(int year, int month, int day)
{
DateTime m_Date = new DateTime(year, month, day);
int cnd,cnm,icnm;
ChineseLunisolarCalendar cnCalendar = new ChineseLunisolarCalendar();
cnd = cnCalendar.GetDayOfMonth(m_Date);
cnm = cnCalendar.GetMonth(m_Date);
icnm = cnCalendar.GetLeapMonth(cnCalendar.GetYear(m_Date));
string txcns = "";
//格式化月份显示
string[] cnMonth ={ "", "正月", "二月", "三月", "四月", "五月", "六月"
, "七月", "八月", "九月", "十月", "十一月", "十二月", "十二月" };
if (icnm > 0)
{
//for (int i = icnm + 1; i < 13; i++) cnMonth[i] = cnMonth[i - 1];
for (int i = 12; i >= icnm; i--) cnMonth[i] = cnMonth[i - 1];
cnMonth[icnm] = "闰" + cnMonth[icnm];
}
txcns += cnMonth[cnm];
string[] cnDay ={ "", "初一", "初二", "初三", "初四", "初五", "初六", "初七"
, "初八", "初九", "初十", "十一", "十二", "十三", "十四", "十五", "十六"
, "十七", "十八", "十九", "二十", "廿一", "廿二", "廿三", "廿四", "廿五"
, "廿六", "廿七", "廿八", "廿九", "三十" };
txcns += cnDay[cnd];
return txcns;
}
/// <summary>
/// 生成某年某月的日历,代码是去掉<table>标记的部分
/// </summary>
/// <param name="year"></param>
/// <param name="month"></param>
/// <returns></returns>
public static string GetRlStr(int year, int month)
{
StringBuilder sb = new StringBuilder();
DateTime today = DbHelper.GetCurrentTime();//取当前天,当前天以前的日历应该是不可点的
DateTime dtime = new DateTime(year, month, 1);
int firweek = Convert.ToInt32(dtime.DayOfWeek);//看这个月的最后一天是周几
int endday = GetTheEndDay(dtime);//取这年这月的最后一天
DateTime etime = new DateTime(year, month, endday);
int eweek = Convert.ToInt32(etime.DayOfWeek);//取这个月最后一天的星期
int row = 5;
int total = endday + firweek;
if (total % 7 == 0)
{
row = total / 7;
}
else
{
row = total / 7 + 1;
}
int day = 1;
for (int i = 0; i < row; i++)
{
sb.Append("<tr>");
if (i == 0)
{
int k = 0;
for (k = 0; k < firweek; k++)
{
sb.Append("<td class=\"dis\"></td>");
}
//将第一行补充完整
for (int t = k; t < 7; t++)
{
string tdclass = " class=\"can srl\"";
string clstr = " class=\"canen\"";
DateTime ntime = new DateTime(year, month, day);
if (today > ntime)
{
tdclass = " class=\"noc\"";
clstr = "";
}
string nl = GetNongliRiqi(year, month, day);
sb.Append("<td" + tdclass + "><div class=\"rq\">" + day + "</div><div" + clstr + ">" + "</div><div class=\"nl\">" + nl + "</div></td>");
day++;//天数加一
}
}
else if (i == row-1)
{
for (int k = 0; k <= eweek; k++)
{
string tdclass = " class=\"can srl\"";
string clstr = " class=\"canen\"";
DateTime ntime = new DateTime(year, month, day);
if (today > ntime)
{
tdclass = " class=\"noc\"";
clstr = "";
}
string nl = GetNongliRiqi(year, month, day);
sb.Append("<td" + tdclass + "><div class=\"rq\">" + day + "</div><div" + clstr + ">" + "</div><div class=\"nl\">" + nl + "</div></td>");
day++;//天数加一
}
//将最后一行补全
for (int k = eweek+1; k < 7; k++)
{
sb.Append("<td class=\"dis\"></td>");
}
}
else
{
//中间行都是满的
for (int k = 0; k < 7; k++)
{
string tdclass = " class=\"can srl\"";
string clstr = " class=\"canen\"";
DateTime ntime = new DateTime(year, month, day);
if (today > ntime)
{
tdclass = " class=\"noc\"";
clstr = "";
}
string nl = GetNongliRiqi(year, month, day);
sb.Append("<td" + tdclass + "><div class=\"rq\">" + day + "</div><div" + clstr + ">" + "</div><div class=\"nl\">" + nl + "</div></td>");
day++;
}
}
sb.Append("</tr>");
}
return sb.ToString();
}
#endregion
前台:
<table width="100%" cellpadding="0" cellspacing="0" class="mytab" id="rltab">
<tr>
<th>日</th>
<th>一</th>
<th>二</th>
<th>三</th>
<th>四</th>
<th>五</th>
<th>六</th>
</tr>
<%=BaseMethod.GetRlStr(2014,3)%>
</table>
样式:
#rltab td
{
height:60px;
position:relative;
}
#rltab td.dis
{
cursor:not-allowed;
background:#acacac;
}
#rltab td.noc
{
cursor:not-allowed;
background:#bbb;
}
#rltab td.can
{
cursor:pointer;
}
#rltab td .rq
{
position:absolute;
right:0px;
width:20px;
height:20px;
top:0px;
text-align:center;
}
#rltab td .nl
{
position:absolute;
bottom:0px;
height:20px;
left:0px;
color:#aaa;
padding-left:5px;
}
#rltab td .canen
{
position:absolute;
top:20px;
height:35px;
left:0px;
width:100%;
z-index:3;
text-align:center;
}
效果如图: