jQuery datepicker переменная minDate - PullRequest
7 голосов
/ 20 марта 2010

Я использую сборщик данных jQuery. В моем текстовом поле «EndDate» я хотел бы использовать дату, выбранную из текстового поля «StartDate» + 1. Как мне это сделать?

Я попробовал это, но не сработало. В моем коде даты начала у меня было ...

            test = $(this).datepicker('getDate');
            testm = new Date(test.getTime());
            testm.setDate(testm.getDate() + 1);

Тогда в моем конце даты у меня был код ...

minDate: testm,

но конечная дата все еще делает доступными все дни месяца.


Редактировать. Мне любопытно, почему это не работает. В моей дате начала выбора даты у меня есть это ..

onSelect: function (dateText, inst) {
    test = dateText
}

Почему я не могу зайти в свой указатель даты и сказать: minDate: test?


Редактировать. Все еще не работает

    $(".dateStartDatePickerBox").datepicker({
        minDate:'-0d',
        onSelect: function(dateText, inst)
        {
            test = $(this).datepicker('getDate');
            testm = new Date(test.getTime());
            testm.setDate(testm.getDate() + 1);

            $("#dateEndDatePickerBox").datepicker("option", "minDate", testm);
        }
    });

    $(".dateEndDatePickerBox").datepicker({
        onSelect: function()
        {

        }
    });

Ответы [ 3 ]

21 голосов
/ 20 марта 2010

Вам нужно будет динамически установить минимальную дату в событии изменения начальной даты.

Что-то вроде:

$("#startDate").change(function() {
    test = $(this).datepicker('getDate');
    testm = new Date(test.getTime());
    testm.setDate(testm.getDate() + 1);

    $("#endDate").datepicker("option", "minDate", testm);
});

Ответ на редактирование:

Вы не можете делать следующее:

var test;
$("#myinput").datepicker({
    onSelect: function() { test = $(this).datepicker("getdate"); }
});
$("#myotherinput").datepicker({
    minDate: test
});

Тест не инициализируется во время установки minDate на myotherinput. Процесс установки minDate, несомненно, требует манипуляций с DOM, которыми datepicker управляет при инициализации или когда вызывается «option» Простое изменение переменной, которая использовалась для инициализации, не влияет на уже инициализированный указатель даты.

0 голосов
/ 21 марта 2010

API документация для средства выбора даты, похоже, говорит о том, что он должен принимать объект Date, но у меня была именно эта проблема в прошлом, и именно так я ее решил.

Пропуск minDate и смещение вместо даты. Вам понадобится функция для определения даты начала, добавления к ней и получения смещения от сегодняшнего дня. Таким образом, вы могли бы иметь такую ​​функцию:

function offsetFromToday( someDate ) {
  // clear time offset because we only want to take date into account
  someDate.setHours( 0 );
  someDate.setMinutes( 0 );

  // The number of milliseconds in one day
  var ONE_DAY = 1000 * 60 * 60 * 24;

  // Convert both dates to milliseconds
  someDate = someDate.getTime();
  var today = new Date().getTime();

  // Calculate the difference in milliseconds
  var difference = Math.abs( someDate - today );

  // Convert back to days and return
  return Math.floor( (difference / ONE_DAY) + 1 );
}

Так что вам просто нужно получить начальную дату на день вперед: StartDate.setDate( StartDate.getDate() + 1 ) или аналогичную, а затем передать ее этой функции для получения смещения, а затем присвоить , что - minDate.

0 голосов
/ 20 марта 2010

Вы говорите, устанавливая максимальную дату выбора?

StartDate = new Date("March 20, 2010");
EndDate = new Date("March 21, 2010");

$("#datepicker").datepicker({ minDate: StartDate, maxDate: EndDate, defaultDate: StartDate  });

Обратите внимание на maxDate? Это не позволит вам выбрать какие-либо дни после этого ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...