javascript計算兩個日期之間的天數

今天在項目中需用計算一下兩個日期之間的間隔數,比如2012-08-10至2012-08-10是之間間隔一天,如果是2012-06-29至2012-07-01就是三天,這個之前寫的js方法中出現了一個bug,也就是 2012-06-29至2012-07-01 計算成了4天,實際只有3天,下面貼一下之前的那個js方法:

  1. //計算兩個日期的時間間隔 
  2.         function compareDate(start,end){ 
  3.             if(start==null||start.length==0||end==null||end.length==0){ 
  4.                 return 0; 
  5.             } 
  6.              
  7.             var arr=start.split("-");  
  8.             var starttime=new Date(arr[0],arr[1],arr[2]);  
  9.             var starttimes=starttime.getTime(); 
  10.              
  11.             var arrs=end.split("-");  
  12.             var endtime=new Date(arrs[0],arrs[1],arrs[2]);  
  13.             var endtimes=endtime.getTime(); 
  14.              
  15.             var intervalTime = endtimes-starttimes;//兩個日期相差的毫秒數 一天86400000毫秒 
  16.             var Inter_Days = ((intervalTime).toFixed(2)/86400000)+1;//加1,是讓同一天的兩個日期返回一天 
  17.              
  18.             return Inter_Days; 
  19.         } 

這個方法寫好了,但是沒有做好特殊情況的測試,也就是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(); //現在的時間

知道這一點,其實也知道哪裏出錯啦!

改爲下面後方法就正常了!

  1. //計算兩個日期的時間間隔 
  2.         function compareDate(start,end){ 
  3.             if(start==null||start.length==0||end==null||end.length==0){ 
  4.                 return 0; 
  5.             } 
  6.              
  7.             var arr=start.split("-");  
  8.             var starttime=new Date(arr[0],parseInt(arr[1]-1),arr[2]);  
  9.             var starttimes=starttime.getTime(); 
  10.              
  11.             var arrs=end.split("-");  
  12.             var endtime=new Date(arrs[0],parseInt(arrs[1]-1),arrs[2]);  
  13.             var endtimes=endtime.getTime(); 
  14.              
  15.             var intervalTime = endtimes-starttimes;//兩個日期相差的毫秒數 一天86400000毫秒 
  16.             var Inter_Days = ((intervalTime).toFixed(2)/86400000)+1;//加1,是讓同一天的兩個日期返回一天 
  17.              
  18.             return Inter_Days; 
  19.         } 

 

ok!程序正常了!其實關於js的時間函數以前也一直用,只不過很多這些方法 我都沒去記,我遇到的問題也都是把它們記錄下來,但是沒有把這些東西記在腦子裏,呵呵!下次遇到應該就有印象了,我也覺得沒必要把這些東西刻在腦子裏,但是如果你的記憶力夠好,我也還是建議記一下,我自己的記憶力我覺得沒那麼好!呵呵!

我上網也找了其他一個方法,好像不會出現我那個問題:

有需要可以參考下!

  1. <HTML>    
  2. <HEAD>    
  3. <TITLE>Calc Days</TITLE>   
  4.  
  5.    
  6. <script language="JavaScript">    
  7. // 計算兩個日期的間隔天數    
  8. function Computation(){     
  9.   var aDate, oDate1, oDate2, iDays     
  10.   var sDate1=document.getElementById("date1").value;   //sDate1和sDate2是2008-12-13格式   
  11.   var sDate2=document.getElementById("date2").value;  
  12.   aDate = sDate1.split("-")      
  13.   oDate1 = new Date(aDate[1] + '-' + aDate[2] + '-' + aDate[0])   //轉換爲12-13-2008格式      
  14.   aDate = sDate2.split("-")      
  15.   oDate2 = new Date(aDate[1] + '-' + aDate[2] + '-' + aDate[0])      
  16.   iDays = parseInt(Math.abs(oDate1 - oDate2) / 1000 / 60 / 60 /24)+1;   //把相差的毫秒數轉換爲天數      
  17.    //alert(iDays);    
  18.   document.getElementById("dateresult").innerText="兩個日期相差"+iDays+"天"; 
  19.    
  20.       
  21. }    
  22. </script>    
  23.    
  24. </HEAD>    
  25.    
  26. <BODY> 
  27. <label>Date1:</label> 
  28. <input type="text" id="date1" value="2012-02-28"/> 
  29. <label>Date2:</label> 
  30. <input type="text" id="date2" value="2012-03-01"/> 
  31. <br/> 
  32. <input type="button" value="計算相差天數" onclick="Computation()" /> 
  33. <p id="dateresult" style="font:'40';color:'#FF8000'">兩個日期相差:</p>   
  34.    
  35. </BODY>    
  36. </HTML>   

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章