Это не полный ответ, но я взломал что-то вместе , что, надеюсь, поможет вам начать. Он удовлетворяет некоторым вашим требованиям, но подсветка при наведении не идеальна (иногда выделяются дополнительные даты), и я не доволен всеми объектами JavaScript Date, поэтому, возможно, потребуется некоторая оптимизация. Код включен ниже:
HTML
From:<div id="fromDate"></div>
To:<div id="toDate"></div>
CSS
body {
margin:10px 0 0 5px;
font-family:Verdana;
font-size:.8em;
}
.ui-datepicker .ui-datepicker-calendar .ui-state-highlight a {
background: #743620 none; /* a color that fits the widget theme */
color: white; /* a color that is readeable with the color above */
}
JavaScript
$('#fromDate').datepicker({
onSelect: function(dateText, inst) {
// set range <selected, +10d> on toDate
var minDate = $(this).datepicker('getDate');
var maxDate = new Date(minDate);
maxDate.setDate(maxDate.getDate() + 9);
var plusOne = new Date(minDate);
plusOne.setDate(minDate.getDate() + 1);
var plusTwo = new Date(minDate);
plusTwo.setDate(minDate.getDate() + 2);
var nowPlusThree = [minDate, plusOne, plusTwo];
$('#toDate').datepicker('destroy').multiDatesPicker({minDate: minDate, maxDate:maxDate, 'addDates': nowPlusThree});
$('#fromDate').off('hover', 'a');
}
});
$('#toDate').datepicker();
$('#fromDate').on('hover', 'a', function() {
var hoveredDate = new Date($('#fromDate .ui-datepicker-month').text() + ' ' + $(this).text() + ' ' + $('#fromDate .ui-datepicker-year').text());
var plusOne = new Date(hoveredDate);
plusOne.setDate(hoveredDate.getDate() + 1);
var plusTwo = new Date(hoveredDate);
plusTwo.setDate(hoveredDate.getDate() + 2);
var nowPlusThree = [hoveredDate, plusOne, plusTwo];
var existingDates = $('#toDate').multiDatesPicker('getDates');
$('#toDate').multiDatesPicker('removeDates', existingDates);
$('#toDate').multiDatesPicker({'addDates': nowPlusThree});
});
Обратите внимание, что демонстрационная версия jsFiddle также включает jQueryUI Theme и плагин Multiple Dates Picker в соответствии с рекомендациями @ diEcho