Рассчитать количество дней в javacript

Я знаю, что этот вопрос задавали раньше, но я не мог найти ничего близкого к тому, что я пытаюсь сделать. Я использую jQuery Datepicker http://keith-wood.name/datepick.html и используя диапазон с двумя календарями. В моем приложении у меня есть услуга, на которую я беру плату за 1 день. То, что я хочу сделать, - предложить конечному пользователю диапазон дат, чтобы выбрать, сколько дней они хотели бы купить, и показать им общее количество. Чтобы начать работу, я просто хочу знать, как рассчитать количество дней, выбранных в диапазоне.

Вот мой код:

<?php 
// this has the css and javascript includes
include('includes/header.php');
?>
<div class="container">
<div class="row">
<div class="span3"></div>
<div class="span9">
    <form>
  <div class="controls">
    <input id="range2Picker" name="range2Picker" value=""  class="input-large" required="" type="text"> 
  </div>
</form>
</div>
</div>

</div>

<script>
$('#range2Picker').datepick({ 
    date1 = new Date(date1);
    date2 = new Date(date2);
    rangeSelect: true, 
    monthsToShow: 2,
    changeMonth: false,
    minDate: +3,
    onClose: function(date1, date2) { 
        var timediff = date2 - date1;
        alert('Number of days are: ' + timediff); 
    } 

});

</script>

Ответ 1

Ответы с участием Math.ceil становятся жертвами проблем вокруг летнего времени (летнее время). Например, в США:

Math.ceil((new Date("November 4, 2013").getTime() - 
           new Date("November 2, 2013").getTime()) / (1000 * 3600 * 24)); //=> 3

Math.floor будет иметь ту же проблему в Spring:

Math.floor((new Date("March 11, 2013").getTime() - 
            new Date("March 9, 2013").getTime()) / (1000 * 3600 * 24)); // 1

Лучше будет Math.round:

var days = Math.round( (1*date2 - 1*date1) / 86400000, 0);

Ответ 2

он дает вам разницу в миллисах, конвертирует их в дни

var timeDiff = Math.abs(date2.getTime() - date1.getTime());
var diffDays = Math.ceil(timeDiff / (1000 * 3600 * 24)); 
alert(diffDays)​;