JQuery DatePicker, пользовательский диапазон диапазона - PullRequest
1 голос
/ 13 марта 2012

Я использую jQuery datepicker с пользовательским набором диапазонов дат, собранных из базы данных MySQL. Результирующий код из запроса выглядит так:

//<![CDATA[
$(window).load(function(){
    var ranges = [ { start: new Date(2012, 02, 14), end: new Date(2012, 03, 31) } ];            
    $(function() {    
        $("#datepicker").datepicker({
            numberOfMonths: 1,
            dateFormat: 'd MM, yy',
            beforeShowDay: function(date) {
                for(var i=0; i<ranges.length; i++) {
                    if(date >= ranges[i].start && date <= ranges[i].end) return [true, ''];
                }
                return [false, ''];
            },
            minDate: ranges[0].start,
            maxDate: ranges[ranges.length -1].end
        });
    });
});//]]> 

(запрашиваются диапазоны дат).

Моя проблема заключается в следующем:

Когда календарь отображается, по какой-то причине он решает добавить месяц к тому, что можно выбрать. То есть. если вы установите дату окончания 31 марта, она изменит ее на 1 мая, или если вы установите ее как! st февраля, это позволит вам выбрать до 1 марта. Я пытался обойти это путем вычитания 1 месяца из даты, но, конечно, это не работает, так как месяцы имеют разное количество дней, поэтому, если бы у меня было 31 марта, я не мог бы просто минус 1 месяц как 31-е. Февраль не существует.

Есть идеи, что не так с кодом? Я уверен, что это код JQuery выше!

Вы можете увидеть пример на http://bookingtest.walesdesign.com

1 Ответ

5 голосов
/ 13 марта 2012

Я думаю, что проблема в том, что вы устанавливаете конечную дату 31 апреля, которая не существует (и поэтому возвращается 1 мая). Помните, что месяцы идут с 0 (январь) до 11 (декабрь). Это работает, как ожидается, с 14 февраля по 28 марта

var ranges = [ { start: new Date(2012, 1, 14), end: new Date(2012, 2, 28) } ];             
$(function() {    
    $("#datepicker").datepicker({
        numberOfMonths: 1,
        dateFormat: 'd MM, yy',
        beforeShowDay: function(date) {
            for(var i=0; i<ranges.length; i++) {
                if(date >= ranges[i].start && date <= ranges[i].end) return [true, ''];
            }
            return [false, ''];
        },
        minDate: ranges[0].start,
        maxDate: ranges[ranges.length -1].end
    });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...