2012-03-13 3 views
1

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

//<![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 Feb, она позволит вам выбрать до 1 марта. Я попытался обойти это, вычитая 1 месяц со дня, но, конечно, это не работает, так как месяцы имеют разное количество дней, поэтому, если бы у меня был 31 марта, я не мог бы просто минус 1 месяц как 31-й Фев не существует.

Любые идеи, что не так с кодом? Я уверен, что код jQuery выше!

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

+1

JavaScript 'date' использует 0 основанные на месяц индексы (что глупо, если вы спросите меня) ... Январь 0, Февраль 1, ... – zzzzBov

ответ

5

Я думаю, что проблема заключается в том, что вы устанавливаете дату окончания 31-го апреля, не существует (и поэтому первое мая возвращается). Помните, что месяцы идут от 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 
    }); 
}); 
+0

Спасибо за помощь! Я не понимал, что месяцы идут от 0-11. Я правильно понимаю, что мне нужно найти способ перевода PHP-версии даты (где May = 5) в версию jQuery даты (где May = 4). Есть ли общий способ сделать это? Или мне просто нужно написать скрипт PHP, который будет - 1 из месяца? –

+1

@KevinSmith делать -1 приемлемо думаю. :) –

Смежные вопросы