ajax版本日历
2006-11-23 22:37 迷路中的路人甲 阅读(976) 评论(1) 编辑 收藏 举报
其实基本就是利用js生成日历。然后利用ajax功能读取日历页面上的每天的信息。我的信息比较简单了,每天仅有一条信息或者没有,所以比较好判断了。
困难的地方是如何生成日历。
以下是我的一些心得 。
第一,先计算出当月1号是星期几。
第二,计算出本月一共有多少天。查了半天资料,js下面没有datediff的函数,郁闷。不过在csdn上找了一个(忘了记住那个帅哥的名字了。先谢谢了。找到了一定补上出处)。
本月一号,下月一号,OK就算出来了。
第三,判断1号之前多少个空格,直接拿1号的星期去减就行了。
第四,算出来最后有多少个空格,也就是输出5行还是6行。
有一个问题没弄明白,1号如果是星期1的话,判断总是出问题,所以就把一号单独拿出来判断了
ok,基本这样日历就能够生成了。
剩下的就是在循环的时候,根据一些条件,也就异步回来的XML来信息,显示到页面上去了
困难的地方是如何生成日历。
以下是我的一些心得 。
第一,先计算出当月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;//获取当前日期
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 这样的格式 。{
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]);
}
本月一号,下月一号,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;
}
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来信息,显示到页面上去了