2015-09-25 3 views
0

на самом деле код работает нормально, когда дата находится в том же месяце, но у меня была проблема, когда дата на другой месяц, например 30/09/2015 и 01/10/2015 количество дней результата 2. (извините за мой плохой английский)Получите количество дней между двумя датами, используя Javascript

Вот пример кода:

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

ow Извините, я использую datetimepicker, я просто задал даты конкретным. –

+0

Вы можете избежать 'Math.abs()', если вы переключите 'dt1' на' dt2', потому что 'dt2.getTime()> = dt1.getTime()' содержит, или? – mvw

ответ

2

методы Дата подсчитывать месяцев от нуля, так что вы должны вычитать 1 из месяца номер, когда установка даты. Это объясняет вашу ошибку, так как вы в конечном итоге вычеркиваете 30-е из октябрь с 1-го числа ноябрь и октябрь имеет 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]) 
Смежные вопросы