代码改变世界

ajax版本日历

2006-11-23 22:37  迷路中的路人甲  阅读(976)  评论(1编辑  收藏  举报
其实基本就是利用js生成日历。然后利用ajax功能读取日历页面上的每天的信息。我的信息比较简单了,每天仅有一条信息或者没有,所以比较好判断了。

困难的地方是如何生成日历。

以下是我的一些心得 。

第一,先计算出当月1号是星期几。
var dt=$F("dt"); //为输入的日期
            
var dd;
            dd
=dt.split("-");
            
var today=new Date(dd[0],(dd[1]-1),dd[2]);
            
var nowdate=new Date();
            
var daystart = today.getMonth() + "/1/" + today.getYear(); //获取一号的日期
            
            
var x=daystart.split("/");
            
var dayDate = new Date(x[2],x[0],1);
            
var weekstart= dayDate.getDay()+1;//获取当前日期

第二,计算出本月一共有多少天。查了半天资料,js下面没有datediff的函数,郁闷。不过在csdn上找了一个(忘了记住那个帅哥的名字了。先谢谢了。找到了一定补上出处)。
function DateDiff(datePart,startDate,endDate)
        
{
            
var miStart = strToDate(startDate);
            
var miEnd   = strToDate(endDate);
            
switch(datePart.toLowerCase())
            
{
                
case "year":
                
return miEnd.getFullYear()-miStart.getFullYear();
                
break;
                
case "month":
                
return (miEnd.getFullYear()-miStart.getFullYear())*12+miEnd.getMonth()-miStart.getMonth();
                
break;
                
case "day":
                
return (miEnd-miStart)/(1000*24*3600);
                
break;
            }

        }

        
function strToDate(string)
        
{
            
var arr=string.split("-");
            
return new Date(arr[0],arr[1],arr[2]);
        }
需要注意的是,输入的一定都是字符型的,所以自己日期要先自己转换成为 2006-12-21 这样的格式 。
本月一号,下月一号,OK就算出来了。

第三,判断1号之前多少个空格,直接拿1号的星期去减就行了。

第四,算出来最后有多少个空格,也就是输出5行还是6行。

有一个问题没弄明白,1号如果是星期1的话,判断总是出问题,所以就把一号单独拿出来判断了
var emptyWeek=weekstart-1; //1号的日期
            
if(emptyWeek==0) //1号为星期一的时候出错,所以就单独来判断了
            
{
                emptyWeek
=1;
            }

            
var startDate = dd[0+"-" + (parseInt(dd[1])-1+ "-1"//获得计算开始日期。
            
var endDate;
            
var startDiv; //开始的空格+当月的日期数
            
var endDiv; //最后的空格
            endDate
=dd[0+ "-"+ parseInt(dd[1])+"-1"; //计算结束日期
            
                    
            
var dayOfMonth=DateDiff("day",startDate,endDate); //判断本月日期
            startDiv
= emptyWeek + dayOfMonth-1;
            
            
if(startDiv<=35)
            
{
                endDiv
=35-startDiv;
            }

            
else
            
{
                endDiv
=42-startDiv;
            }

ok,基本这样日历就能够生成了。
剩下的就是在循环的时候,根据一些条件,也就异步回来的XML来信息,显示到页面上去了