2015-09-25 88 views
0

實際上,當日期在同一月份時,代碼正常工作,但當日期處於不同的月份時,例如30/09/2015和01/10/2015年的天結果數是2。(對不起我的英文不好)使用Javascript獲取2個日期之間的天數

這裏的示例代碼:

var dtElem1 = '30/09/2015'; 
var dtElem2 = '01/10/2015'; 
var resultElem = frm.elements['numberofdays']; 
var oneDay = 24*60*60*1000; 

var x = dtElem1.value; 
var y = dtElem2.value; 
var arr1 = x.split('/'); 
var arr2 = y.split('/'); 

var dt1 = new Date(); 
dt1.setFullYear(arr1[2], arr1[1], arr1[0]); 
var dt2 = new Date(); 
dt2.setFullYear(arr2[2], arr2[1], arr2[0]); 

resultElem.value = Math.round(Math.abs((dt1.getTime() - 
    dt2.getTime())/(oneDay))); 
+0

難道你不會忘記第1行和第2行的一些引號嗎? – Touffy

+0

對不起,我使用datetimepicker,我只是把日期具體。 –

+0

由於'dt2.getTime()> = dt1.getTime()'成立,或者?可以避免''Math.abs()''如果用'dt2'切換'dt1', – mvw

回答

2

的日期方法從零數個月,所以你應該從本月號碼時。減去1設定日期。這解釋了你的錯誤,因爲你最終將從11月減去十月的第30天,10月有31天。

這將使預期的結果:

dt1.setFullYear(arr1[2], arr1[1] - 1, arr1[0]) 
dt2.setFullYear(arr2[2], arr2[1] - 1, arr2[0]) 

請注意,您不需要創建日期,然後將其設置。你可以直接將相同的參數傳遞給構造函數:

dt1 = new Date(arr1[2], arr1[1] - 1, arr1[0]) 
dt2 = new Date(arr2[2], arr2[1] - 1, arr2[0]) 
相關問題