Установка jQuery UI datepicker на первую дату, определенную как действительную - PullRequest
0 голосов
/ 02 августа 2011

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

  • позже, чем сегодня;и
  • в понедельник или во вторник

(Есть другие условия, но я их пока игнорирую.)

Когда я пишу это, ив течение следующих нескольких дней правильное значение этой даты - 8/8/2011.

Вот страница:

http://www.lolacookies.com/gifts/

Вот мой код,который не работает.Комментируемая часть - то, что должно делать работу.Значение входа не устанавливается вообще;в предыдущих попытках дата была установлена ​​на значение minDate, но не на любое другое значение.

$(document).ready(function(){


$(".datepicker").datepicker({
    beforeShowDay: nonWorkingDates,
    hideIfNoPrevNext: true,
    numberOfMonths: 1,
    minDate: "+1d",
    maxDate: "+3M",
    showAnim: "blind",
    showOn: "both",
    buttonImage: "/images/misc/calendar.png",
    buttonImageOnly: true,
    buttonText: "Select a date"
});


//set firstShippingDate to value of minDate
//we don't ship on same day, so minDate is today + 1d
var firstShippingDate = $( ".datepicker" ).datepicker( "option", "minDate" );

//we ship only on Monday and Tuesday, so test for that
var dayOfWeek = firstShippingDate.getDay();

//if it's not Monday or Tuesday, advance firstShippingDate by one day and test again
while ( dayOfWeek == 0 || dayOfWeek == 3 || dayOfWeek == 4 || dayOfWeek == 5 || dayOfWeek == 6 )
  {
    firstShippingDate.setTime(firstShippingDate.getTime() + 86400000);
    dayOfWeek = firstShippingDate.getDay();
  };

//should exit loop with firstShippingDate set to first Monday or Tuesday that's not today
//set datepicker to that firstShippingDate
$(".datepicker").datepicker( "setDate" , firstShippingDate );


function nonWorkingDates(date){
    var day = date.getDay(), Sunday = 0, Monday = 1, Tuesday = 2, Wednesday = 3, Thursday = 4, Friday = 5, Saturday = 6;
    var closedDates = [[06, 27, 2011], [06, 28, 2011], [06, 29, 2011], [07, 04, 2011]];
    var closedDays = [[Sunday], [Wednesday], [Thursday], [Friday], [Saturday]];
    for (var i = 0; i < closedDays.length; i++) {
        if (day == closedDays[i][0]) {
            return [false];
        }

    }

    for (i = 0; i < closedDates.length; i++) {
        if (date.getMonth() == closedDates[i][0] - 1 &&
        date.getDate() == closedDates[i][1] &&
        date.getFullYear() == closedDates[i][2]) {
            return [false];
        }
    }

    return [true];
}


});

1 Ответ

0 голосов
/ 02 августа 2011

Возможно, вы захотите проверить библиотеку DateJS .Это позволяет вам делать такие классные вещи, как это, чтобы получить следующий понедельник:

Date.today().next().monday();

Так что в вашем случае вы можете сделать что-то подобное, чтобы получить следующий понедельник или вторник:

if (Date.today().is().monday()) {
  firstShippingDate = Date.today().next().tuesday();
} else {
  firstShippingDate = Date.today().next().monday();
}
...