bootstrap datepicker, beforeShowDay и массив отключенных дат

Я пытаюсь использовать плагин bootstrap datepicker (https://github.com/eternicode/bootstrap-datepicker/blob/release/docs/index.rst) с переданным в него массивом отключенных дней.

Мой код (частичный):

 var disabled_dates = ["23.03.2014","21.03.2014"];
 $("#datepicker").datepicker({
      language: "pl",
      autoclose: true,
      startDate: '+1d',
      weekStart: 1,
      default: 'dd.mm.yyyy',
      beforeShowDay: function(date){
           var formattedDate = $.fn.datepicker.DPGlobal.formatDate(date, 'dd.mm.yyyy', 'pl');
           if ($.inArray(formattedDate.toString(), disabled_dates) != -1){
               return {
                  enabled : false
               };
           }
          return;
      }
  });

работает (почти) нормально. Он отключает неправильную дату. Вместо отключения 23.03.2014 отключил 24.04.2014. Я не уверен, в чем проблема, может быть, в часовом поясе? Какие-либо предложения?


person dease    schedule 21.03.2014    source источник
comment
У меня такая же проблема. Принятый ответ работает только в IE11+, поэтому я все еще ищу ответ. Дата начала значения не имеет.   -  person Laurens Kling    schedule 09.02.2015
comment
Я обнаружил, что это происходит потому, что он переводит дату в UTC, что переводит все даты на день назад во времени, если вы находитесь в нашем часовом поясе. пока не знаю как исправить..   -  person Laurens Kling    schedule 09.02.2015


Ответы (2)


Заглянув внутрь плагина, я обнаружил, что $.fn.datepicker.DPGlobal.formatDate возвращает строку в формате UTC вместо GMT. Попробуйте изменить значение переменной formattedDate на это:

var formattedDate = date.toLocaleDateString('pl',{day:'2-digit',year:'numeric',month:'2-digit'});
person Justin Paul Paño    schedule 22.03.2014

Вам просто нужно удалить строку «startDate: '+1d'», ее использование не имеет смысла, когда у вас есть доступный массив дат. В любом случае, вы можете добавить новую функцию Date(), чтобы получить актуальную дату.

Это будет примерно так:

 //here you store new Date() Object to get today's date formatted as you want dd.mm.yyy

 var disabled_dates = ["23.03.2014","21.03.2014"];
 $("#datepicker").datepicker({
      language: "pl",
      autoclose: true,
      //removed line: startDate: '+1d',
      weekStart: 1,
      default: 'dd.mm.yyyy',
      beforeShowDay: function(date){
           var formattedDate = $.fn.datepicker.DPGlobal.formatDate(date, 'dd.mm.yyyy', 'pl');
           if ($.inArray(formattedDate.toString(), disabled_dates) != -1){
               return {
                  enabled : false
               };
           }
          return;
      }
  });
person meetnick    schedule 26.03.2014