Datepicker - Как установить дату по умолчанию на следующую доступную дату, а не «сегодня»? - PullRequest
2 голосов
/ 15 марта 2012

Я использую DatePicker для моего сайта.Я выбрал несколько дней, чтобы не принимать заказы.Когда я отключил день, и это действительно тот день, по умолчанию дата выбирается в качестве этого дня, даже если у меня она запрещена.

Позвольте мне объяснить:

  • 17 марта - это отключенная дата, поэтому пользователи не могут выбрать эту дату
  • Пользователь заходит на сайт 17 марта, и в текстовом поле отображаетсядата по умолчанию 17 марта
  • Когда пользователь отправляет форму без выбора новой даты - 17 марта пропускается как дата по умолчанию.

Я хотел бы, чтобы по умолчанию была установлена ​​следующая доступная дата, которая в моем примере была бы 18 марта.

Есть ли способ установитьдата по умолчанию до следующей доступной даты после отключенной даты?

Заранее спасибо.

Мой код JS пока таков:

<script type="text/javascript">
jQuery.noConflict();
  jQuery(document).ready(function($) {

$("#input_1_16").datepicker({ beforeShowDay: nationalDays, minDate: 0, maxDate: "+4m"})   

natDays = [
    [1, 26], 
    [2, 6],
    [3, 15,17],
    [4, 27], 
    [5, 15,25], 
    [6, 6],
    [7,19], 
    [8,27], 
    [9,],
    [10,], 
    [11,], 
    [12,23,24,25,30,31]
];

function nationalDays(date) {
    for (i = 0; i < natDays.length; i++) {
      if (date.getMonth() == natDays[i][0] - 1
          && date.getDate() == natDays[i][1]) {
        return [false, natDays[i][2] + '_day'];
      }
    }
  return [true, ''];
}

  });
</script>

Ответы [ 2 ]

1 голос
/ 16 марта 2012

Мой приятель смог ответить на этот вопрос: код выглядит следующим образом, здесь есть рабочий пример http://jsfiddle.net/NHdEX/8/

natDays = [
      [1,26], 
    [2,6],
    [3,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31],
      [4,27], 
      [5,15,25], 
      [6,6],
      [7,19], 
      [8,27], 
      [9],
      [10], 
      [11], 
      [12,23,24,25,30,31]
];

function getMinDate() {
    var now = new Date();

    var monthnumber = now.getMonth();
    var monthday = now.getDate();
    var year = now.getFullYear();

    //check if today is a holiday. 
    //by default do not skip any dates, allow user to select today. 
    var dayOffset = 0; 

    var date; 
    var currentDay = monthday; 

    var currentMonth = monthnumber; 
    for(var i = 0; i < natDays.length; i++){
        date = natDays[i]; 
        //check month
        if(date[0] == currentMonth+1){
            for(var j=1;j<date.length;j++){
                currentDay == 0; 
                while(date[j] == currentDay){
                    dayOffset++; 
                    currentDay++;
                }
            }
        }
    }


    //calculate the new date. 
    now.setDate(now.getDate() + dayOffset);

    return (now.getMonth() + 1) + '/' + now.getDate() + '/' + now.getFullYear();
}

function nationalDays(date) {
    for (i = 0; i < natDays.length; i++) {
      if (date.getMonth() == natDays[i][0] - 1
          && date.getDate() == natDays[i][1]) {
        return [false, natDays[i][2] + '_day'];
      }
    }
  return [true, ''];
}


$("#input_1_16").val(getMinDate());
$("#input_1_16").datepicker({ beforeShowDay: nationalDays, minDate: getMinDate(), maxDate: "+4m"});  

0 голосов
/ 15 марта 2012
// Getting the first good day
var default = new Date();
while(nationalDays(default)[0]){
   default = new Date().setDate(default.getDate()+1);
}

// Creating by giving the first good day as default
$("#input_1_16").datepicker({defaultDate: default beforeShowDay: nationalDays, minDate: 0, maxDate: "+4m"});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...