本帖最后由 henry_wzt 于 2009-06-09 22:52:31 编辑

解决方案 »

  1.   

    不太懂什么意思。
    应该是属于前台工作吧,javascript应该就够了。
      

  2.   

    不太清楚楼主要的效果,这时以前我用的一个很简单的点击日历自动填写日期的代码,不知道能用得上不?
    有JS和PHP两种写法,楼主看看区别吧。JS还可以用window.myCalendar来做<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    <title>Canlender--JavaScript</title>
    <style>
    td {
     font-family: Arial, Helvetica, sans-serif;
     font-size: 12px;
    }</style></head>
    <body>
    <table border="0" cellpadding="0" cellspacing="0" width="180">
    <tr><td id=cc>
    </td></tr></table>
    </body>
    <script language="JavaScript">
    function RunNian(The_Year)
    {
     if ((The_Year%400==0) || ((The_Year%4==0) && (The_Year%100!=0)))
      return true;
     else
      return false;
    }
    function GetWeekday(The_Year,The_Month)
    {
     
     var Allday;
     Allday = 0;
     if (The_Year>2000)
     {
      
      for (i=2000 ;i<The_Year; i++) 
       if (RunNian(i))
        Allday += 366;
       else
        Allday += 365;
      for (i=2; i<=The_Month; i++)
      {
       switch (i)
       {
        case 2 :
         if (RunNian(The_Year))
          Allday += 29;
         else
          Allday += 28;
         break;
        case 3 : Allday += 31; break;
        case 4 : Allday += 30; break;
        case 5 : Allday += 31; break;
        case 6 : Allday += 30; break;
        case 7 : Allday += 31; break;
        case 8 : Allday += 31; break;
        case 9 : Allday += 30; break;
        case 10 : Allday += 31; break;
        case 11 : Allday += 30; break;
        case 12 :  Allday += 31; break;
        
       }
       
      }
     }
     
     return (Allday+6)%7;
     }function chooseday(The_Year,The_Month,The_Day)
    {
     var Firstday;
     var completely_date;
     if (The_Day!=0)
      completely_date = The_Year + "-" + The_Month + "-" + The_Day;
     else
      completely_date = "No Choose";
     //showdate 只是一个为了显示而采用的东西,
     //如果外部想引用这里的时间,可以通过使用 completely_date引用完整日期
     //也可以通过The_Year,The_Month,The_Day分别引用年,月,日
     //当进行月份和年份的选择时,认为没有选择完整的日期
     showdate.innerText = completely_date;
     Firstday = GetWeekday(The_Year,The_Month);
     ShowCalender(The_Year,The_Month,The_Day,Firstday);
     
    }function nextmonth(The_Year,The_Month)
    {
     if (The_Month==12)
      chooseday(The_Year+1,1,0);
     else
      chooseday(The_Year,The_Month+1,0);
    }function prevmonth(The_Year,The_Month)
    {
     if (The_Month==1)
      chooseday(The_Year-1,12,0);
     else
      chooseday(The_Year,The_Month-1,0);
    }function prevyear(The_Year,The_Month)
    {
     chooseday(The_Year-1,The_Month,0);
    }function nextyear(The_Year,The_Month)
    {
     chooseday(The_Year+1,The_Month,0);
    }  function ShowCalender(The_Year,The_Month,The_Day,Firstday)
    { var showstr;
     var Month_Day;
     var ShowMonth;
     var today;
     today = new Date();
     
     
     
     switch (The_Month)
     {
      case 1 : ShowMonth = "January"; Month_Day = 31; break;
      case 2 :
       ShowMonth = "February";
       if (RunNian(The_Year))
        Month_Day = 29;
       else
        Month_Day = 28;
       break;
      case 3 : ShowMonth = "March"; Month_Day = 31; break;
      case 4 : ShowMonth = "April"; Month_Day = 30; break;
      case 5 : ShowMonth = "May"; Month_Day = 31; break;
      case 6 : ShowMonth = "June"; Month_Day = 30; break;
      case 7 : ShowMonth = "July"; Month_Day = 31; break;
      case 8 : ShowMonth = "August"; Month_Day = 31; break;
      case 9 : ShowMonth = "September"; Month_Day = 30; break;
      case 10 : ShowMonth = "October"; Month_Day = 31; break;
      case 11 : ShowMonth = "November"; Month_Day = 30; break;
      case 12 : ShowMonth = "December"; Month_Day = 31; break;
       
     }
     
     
     showstr = "";
     showstr = "<Table cellpadding=0 cellspacing=0 border=1 bordercolor=#999999 width=95% align=center valign=top>";
     showstr +=  "<tr><td width=0 style='cursor:hand' onclick=prevyear("+The_Year+"," + The_Month + ")>&lt;&lt;</td><td width=0>&nbsp;" + The_Year + "&nbsp;</td><td width=0 onclick=nextyear("+The_Year+","+The_Month+")  style='cursor:hand'>&gt;&gt;</td><td width=0 style='cursor:hand' onclick=prevmonth("+The_Year+","+The_Month+")>&lt;&lt;</td><td width=100 align=center>" + ShowMonth + "</td><td width=0 onclick=nextmonth("+The_Year+","+The_Month+")  style='cursor:hand'>&gt;&gt;</td></tr>";
     showstr +=  "<tr><td align=center width=100% colspan=6>";
     showstr +=  "<table cellpadding=0 cellspacing=0 border=1 bordercolor=#999999 width=100%>";
     showstr += "<Tr align=center bgcolor=#999999> ";
        showstr += "<td><strong><font color=#0000CC>日</font></strong></td>";
        showstr += "<td><strong><font color=#0000CC>一</font></strong></td>";
        showstr += "<td><strong><font color=#0000CC>二</font></strong></td>";
        showstr += "<td><strong><font color=#0000CC>三</font></strong></td>";
        showstr += "<td><strong><font color=#0000CC>四</font></strong></td>";
        showstr += "<td><strong><font color=#0000CC>五</font></strong></td>";
        showstr += "<td><strong><font color=#0000CC>六</font></strong></td>";
     showstr += "</Tr><tr>";
     
     for (i=1; i<=Firstday; i++)
      showstr += "<Td align=center bgcolor=#CCCCCC>&nbsp;</Td>";
     
     for (i=1; i<=Month_Day; i++)
     {
      if ((The_Year==today.getYear()) && (The_Month==today.getMonth()+1) && (i==today.getDate()))
       bgColor = "#FFCCCC";
      else
       bgColor = "#CCCCCC";
      
      if (The_Day==i) bgColor = "#FFFFCC";
      showstr += "<td align=center bgcolor=" + bgColor + " style='cursor:hand' onclick=chooseday(" + The_Year + "," + The_Month + "," + i + ")>" + i + "</td>";
      Firstday = (Firstday + 1)%7;
      if ((Firstday==0) && (i!=Month_Day)) showstr += "</tr><tr>";
     }
     if (Firstday!=0) 
     {
      for (i=Firstday; i<7; i++)
       showstr += "<td align=center bgcolor=#CCCCCC>&nbsp;</td>";
      showstr += "</tr>";
     }
      
     showstr += "</tr></table></td></tr></table>";
     cc.innerHTML = showstr;  
     }
    </script><script language="JavaScript"> var The_Year,The_Day,The_Month;
     var today;
     var Firstday;
     today = new Date();
     The_Year = today.getYear();
     The_Month = today.getMonth() + 1;
     The_Day = today.getDate();
     Firstday = GetWeekday(The_Year,The_Month);
     ShowCalender(The_Year,The_Month,The_Day,Firstday);
    </script>
    <div id=showdate></div>
    </html><?php
    //<-------处理通过GET方法提交的变量;开始-------->
    if($HTTP_GET_VARS[year]=="")
    {
        $HTTP_GET_VARS[year]=date("Y");
    }
    if($HTTP_GET_VARS[month]=="")
    {
        $HTTP_GET_VARS[month]=date("n");
    }
    $month=$HTTP_GET_VARS[month];
    $year=$HTTP_GET_VARS[year];
    //<-------处理通过GET方法提交的变量;结束-------->
    if($year<1971)
    {
        echo "出错!";
        echo "<BR>";
        echo "<a href=$HTTP_SERVER_VARS[PHP_SELF]>Back</a>";
        exit();
    }
    ?>
    <table width="200" border="1" cellspacing="0" cellpadding="0" bordercolor="#E7E7E7" style="font-size:12px;" align="center">
    <tr align="center"><td colspan="2">
    <?php
    //<-------当月份超出1至12时的处理;开始------->
    if($month<1)
    {
        $month=12;
        $year-=1;
    }
    if($month>12)
    {
        $month=1;
        $year+=1;
    }
    //<-------当月份超出1至12时的处理;结束------->
    //***************************************
    //<---------上一年,下一年,上月,下月的连接处理及输出;开始--------->
    echo "<a href=$HTTP_SERVER_VARS[PHP_SELF]?year=".($year-1)."& month=".$month.">&lt;&lt;</a>年<a href=$HTTP_SERVER_VARS[PHP_SELF]?year=".($year+1)."&month=".$month.">&gt;&gt;</a>";
    ?>
    </td><td colspan="3"><?php echo $year."年".$month."月";?>
    </td><td colspan="2">
    <?php
    echo "<a href=$HTTP_SERVER_VARS[PHP_SELF]?month=".($month-1)."& year=".$year.">&lt;&lt;</a>月<a href=$HTTP_SERVER_VARS[PHP_SELF]?month=".($month+1)."&year=".$year.">&gt;&gt;</a>";
    //<--------上一年,下一年,上月,下月的连接处理及输出;结束--------->
       ?></td></tr>
    <tr align=center><td><font color="red">日</font></td><td>一</td><td> 二</td><td>三</td><td>四</td><td>五< /td><td>六</td></tr><tr>
    <?php
    $d=date("d");
    $FirstDay=date("w",mktime(0,0,0,$month,1,$year));//取得任何一个月的一号是星期几,用于计算一号是由表格的第几格开始
    $bgtoday=date("d");
    function font_color($month,$today,$year)//用于计算星期天的字体颜色
    {
        $sunday=date("w",mktime(0,0,0,$month,$today,$year));
        if($sunday=="0")
        {
                    $FontColor="red";
        }
        else
        {
                    $FontColor="black";
        }
        return $FontColor;
    }
    function bgcolor($month,$bgtoday,$today_i,$year)//用于计算当日的背景颜色
    {
        $show_today=date("d",mktime(0,0,0,$month,$today_i,$year));
        $sys_today=date("d",mktime(0,0,0,$month,$bgtoday,$year));
        if($show_today==$sys_today)
        {
                    $bgcolor="bgcolor=#6699FF";
        }
        else
        {
                    $bgcolor="";
        }
        return $bgcolor;
    }
    function font_style($month,$today,$year)//用于计算星期天的字体风格
    {
        $sunday=date("w",mktime(0,0,0,$month,$today,$year));
        if($sunday=="0")
        {
                    $FontStyle="<strong>";
        }
        else
        {
                    $FontStyle="";
        }
        return $FontStyle;
    }
    for($i=0;$i<=$FirstDay;$i++)//此for用于输出某个月的一号位置
    {
        for($i;$i<$FirstDay;$i++)
        {
                    echo "<td align=center>&nbsp;</td>\n";
        }
        if($i==$FirstDay)
        {
                    echo "<td align=center ".bgcolor($month,$bgtoday,1,$year)."><font color=".font_color($month,1,$year).">".font_style($month,1,$year)."1</font></td>\n";
                    if($FirstDay==6)//判断1号是否星期六
                    {
                            echo "</tr>";
                    }
        }
    }
    $countMonth=date("t",mktime(0,0,0,$month,1,$year));//某月的总天数
    for($i=2;$i<=$countMonth;$i++)//输出由1号定位,随后2号直至月尾的所有号数
    {
        echo "<td align=center ".bgcolor($month,$bgtoday,$i,$year)."><font color=".font_color($month,$i,$year).">".font_style($month,$i,$year)."$i</font></td>\n";
        if(date("w",mktime(0,0,0,$month,$i,$year))==6)//判断该日是否星期六
        {
            echo "</tr>\n";
        }
    }
    ?>
    </table>