Вы не хотите использовать .val()
здесь, это даст вам строку, и вычитание строк друг из друга не очень полезно.DatePicker имеет метод, getDate
, который дает вам объект Date, чтобы вы могли использовать его:
var start = $('#arr_date').datepicker('getDate');
var end = $('#dep_date').datepicker('getDate');
var days = (end - start)/1000/60/60/24;
Демо: http://jsfiddle.net/ambiguous/TCXcX/
Также,этот код:
$(function() {
var start = $('#arr_date').val();
var end = $('#dep_date').val();
var diff = new Date(end - start);
var days = diff/1000/60/60/24;
$('#num_nights').val(days);
});
будет запущен, когда DOM будет готов, но вы не хотите, чтобы он работал до тех пор, пока не будут выбраны даты.Вам нужно привязать свой (исправленный) код расчета к кнопке или просмотреть события onSelect
:
function showDays() {
var start = $('#arr_date').datepicker('getDate');
var end = $('#dep_date').datepicker('getDate');
if(!start || !end)
return;
var days = (end - start)/1000/60/60/24;
$('#num_nights').val(days);
}
$( "#arr_date" ).datepicker({ dateFormat: 'dd-mm-yy', onSelect: showDays });
$( "#dep_date" ).datepicker({ dateFormat: 'dd-mm-yy', onSelect: showDays });
И еще одну демонстрацию: http://jsfiddle.net/ambiguous/5BbGS/