.net生成日历(带农历)

后台代码:

#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;
}
效果如图:



  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值