2015-06-23 2 views
0

Мне нужно рассчитать количество ночей между 2 датами, это работает, но это очень странно.javascript неверный расчет даты/дня

Если я выбираю даты как 22,06,2015 и 22,07,2015 он показывает мне 31 ночи, что является неправильным, так как июнь имеет только 30 дней.

если я выбираю даты, например 01,07,2015 и 31,07,2015, это показывает мне 30 ночи, что является правильным.

, если я выбираю даты как 01,07,2015 и 1,08,2015 он показывает мне 31 ночи и т.д.

, если я выбираю даты как 30,09,2015 и 30,10,2015 он показывает мне 31.041666666666668 ночи нечетный и неправильно.

Упование вы можете помочь мне с этим. Вот код:

var date11 = $("#in").val(); 
var date22 = $("#out").val(); 

// First we split the values to arrays date1[0] is the year, [1] the month and [2] the day 
date111 = date11.split('-'); 
date222 = date22.split('-'); 

// Now we convert the array to a Date object, which has several helpful methods 
date1 = new Date(date111[2], date111[1], date111[0]); 
date2 = new Date(date222[2], date222[1], date222[0]); 

// We use the getTime() method and get the unixtime (in milliseconds, but we want seconds, therefore we divide it through 1000) 
date1_unixtime = parseInt(date1.getTime()/1000); 
date2_unixtime = parseInt(date2.getTime()/1000); 

// This is the calculated difference in seconds 
var timeDifference = date2_unixtime - date1_unixtime; 

// in Hours 
var timeDifferenceInHours = timeDifference/60/60; 

// and finaly, in days :) 
var timeDifferenceInDays = timeDifferenceInHours/24; 

Спасибо, миллион!

+1

Это первая время, которое я когда-либо видел, разделенные запятыми, а не, скажем, периоды, или слэши, или дефисы. Может быть, вы можете переформатировать с использованием стандарта ISO yyyy-mm-dd? –

+0

Надеюсь, это поможет вам !!!! http://stackoverflow.com/questions/26453996/calculate-days-left-to-a-specific-date-with-javascript?rq=1 – jshuadvd

+0

http://stackoverflow.com/a/2483476/4535386 – yesitsme

ответ

0

Вы не вычитание 1 из календарного месяца номера:

date1 = new Date(date111[2], date111[1] - 1, date111[0]); 
           --------^^^^ 

Месяцев нуля индексируются. вероятно, вы также должны округлить результат, как если бы вы пересекли границу перехода на летнее время, значение времени не будет равным количеству дней, оно будет отсутствовать на 1 час (если вы не пересечете две границы ...)

Смежные вопросы