今天在项目中需用计算一下两个日期之间的间隔数,比如2012-08-10至2012-08-10是之间间隔一天,如果是2012-06-29至2012-07-01就是三天,这个之前写的js方法中出现了一个bug,也就是 2012-06-29至2012-07-01 计算成了4天,实际只有3天,下面贴一下之前的那个js方法:

//计算两个日期的时间间隔
function compareDate(start,end){
if(start==null||start.length==0||end==null||end.length==0){
return 0;
}

var arr=start.split("-");
var starttime=new Date(arr[0],arr[1],arr[2]);
var starttimes=starttime.getTime();

var arrs=end.split("-");
var endtime=new Date(arrs[0],arrs[1],arrs[2]);
var endtimes=endtime.getTime();

var intervalTime = endtimes-starttimes;//两个日期相差的毫秒数 一天86400000毫秒
var Inter_Days = ((intervalTime).toFixed(2)/86400000)+1;//加1,是让同一天的两个日期返回一天

return Inter_Days;
}

这个方法写好了,但是没有做好特殊情况的测试,也就是2012-06-28至2012-07-01 计算成了4天,实际是3天的,6月29日、6月30日、7月1日这三天,如果2月份的天数,这个方法也默认当月是31天,所以这个方法不适用。
后上网查了一下,date的getTime()方法:
js日期的Month是0~11,表示1~12月
你用new Date(2012,6,1,11,41)得到的不是6月1日,而是7月1日的11:41
用new Date(2012,5,31,15,35)得到的不是5月31日,而是7月1日的15:35。因为6月没有31日,所以系统会转成这个。
要把Month减1去构造Date对象才能得到正确是日期,也就是

a='2012-5-31 15:35:00'
b='2012-6-1 11:41:00'
var a= new Date(theYear,theMonth-1,theDay,theHour,theMinute).getTime(); //选择的时间
var b= new Date(Year,Month-1,Day,Hour,Minute).getTime(); //现在的时间

知道这一点,其实也知道哪里出错啦!
改为下面后方法就正常了!

//计算两个日期的时间间隔
function compareDate(start,end){
if(start==null||start.length==0||end==null||end.length==0){
return 0;
}

var arr=start.split("-");
var starttime=new Date(arr[0],parseInt(arr[1]-1),arr[2]);
var starttimes=starttime.getTime();

var arrs=end.split("-");
var endtime=new Date(arrs[0],parseInt(arrs[1]-1),arrs[2]);
var endtimes=endtime.getTime();

var intervalTime = endtimes-starttimes;//两个日期相差的毫秒数 一天86400000毫秒
var Inter_Days = ((intervalTime).toFixed(2)/86400000)+1;//加1,是让同一天的两个日期返回一天

return Inter_Days;
}

ok!程序正常了!其实关于js的时间函数以前也一直用,只不过很多这些方法 我都没去记,我遇到的问题也都是把它们记录下来,但是没有把这些东西记在脑子里,呵呵!下次遇到应该就有印象了,我也觉得没必要把这些东西刻在脑子里,但是如果你的记忆力够好,我也还是建议记一下,我自己的记忆力我觉得没那么好!呵呵!
我上网也找了其他一个方法,好像不会出现我那个问题:
有需要可以参考下!

<HTML>
<HEAD>
<TITLE>Calc Days</TITLE>
<script language="JavaScript">
// 计算两个日期的间隔天数
function Computation(){
var aDate, oDate1, oDate2, iDays
var sDate1=document.getElementById("date1").value; //sDate1和sDate2是2008-12-13格式
var sDate2=document.getElementById("date2").value;
aDate = sDate1.split("-")
oDate1 = new Date(aDate[1] + '-' + aDate[2] + '-' + aDate[0]) //转换为12-13-2008格式
aDate = sDate2.split("-")
oDate2 = new Date(aDate[1] + '-' + aDate[2] + '-' + aDate[0])
iDays = parseInt(Math.abs(oDate1 - oDate2) / 1000 / 60 / 60 /24)+1; //把相差的毫秒数转换为天数
//alert(iDays);
document.getElementById("dateresult").innerText="两个日期相差"+iDays+"天";
}
</script>
</HEAD>
<BODY>
<label>Date1:</label>
<input type="text" id="date1" value="2012-02-28"/>
<label>Date2:</label>
<input type="text" id="date2" value="2012-03-01"/>
<br/>
<input type="button" value="计算相差天数" onclick="Computation()" />
<p id="dateresult" style="font:'40';color:'#FF8000'">两个日期相差:</p>
</BODY>
</HTML>