JQuery UI DatePicker странная проблема (происходит в Firefox) - PullRequest
0 голосов
/ 14 февраля 2011

Я использую следующую функцию, чтобы отключить дни с 2011-02-13 по 2011-02-18 в календаре выбора даты:

function no_disabled_days(date){
               dateStr1 = '2011-02-13';                   
               dateStr2= '2011-02-18';

               disabled_start_day = new Date(dateStr1);
               disabled_end_day = new Date(dateStr2);

               if(date >= disabled_start_day && date <= disabled_end_day){
                   return [false];
               }


             return [true];

  }

$("#reserve_date").datepicker({
            beforeShowDay: no_disabled_Days
});

Например, если dateStr1 = '2011-02-13 ', dateStr2 =' 2011-02-18 ', дни с 2011-02-13 до 2011-02-18 отключены .

Поскольку я использую

if(date >= disabled_start_day && date <= disabled_end_day) (обратите внимание на знак ' = ')

, ' 2011-02-13 'и' 2011-02-18 'отключены.

В браузере Chrome все работает нормально, однако, когда я тестирую в Firefox , точное значение disable_start_date не отключается, это ' 2011-02-13 'не отключен, остальные дни работают нормально.Зачем?

Почему отключенная дата начала ( 2011-02-13 ) не находится в состоянии отключения в Firefox?

1 Ответ

1 голос
/ 14 февраля 2011

Вы столкнулись с проблемой часового пояса.Когда вы создаете свой объект даты, ваш местный часовой пояс влияет на компонент времени объектов Date, что, в свою очередь, влияет на сравнение.Решение состоит в том, чтобы явно установить время при создании объектов Date.

Кроме того, способ использования переменных в вашей функции создает дополнительные глобальные переменные.Вы должны использовать ключевое слово var, чтобы сделать их локальными для функции.

Вот исправленный код:

function no_disabled_days(date){
    var dateStr1 = '2011-02-13T00:00:00';                   
 var dateStr2= '2011-02-19T00:00:00';

 var disabled_start_day = new Date(dateStr1);
 var disabled_end_day = new Date(dateStr2);

  if(date >= disabled_start_day
     && date <= disabled_end_day){
    return [false];
  }
  return [true];
}

$("#reserve_date").datepicker({
  beforeShowDay: no_disabled_days
});

И рабочий пример (протестирован в Firefox и Chrome):

http://jsfiddle.net/ChrisMH/5jX6B/1/

...