Bootstrap日期选择器,beforeShowDay和禁用日期数组

5
我正在尝试使用Bootstrap日期选择器插件(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;
      }
  });

它(几乎)可以正常工作。它禁用了错误的日期。它禁用的是24.04.2014而不是23.03.2014。 我不确定问题出在哪里,可能是时区问题?有什么建议吗?


我遇到了同样的问题。被接受的答案仅在IE11+中有效,所以我仍在寻找答案。StartDate是无关紧要的。 - Laurens Kling
我发现这是因为它将日期转换为UTC,如果你在我们的时区,那么所有的日期都会向前一天。还不知道如何修复它... - Laurens Kling
2个回答

4

在研究插件内部时,我发现$.fn.datepicker.DPGlobal.formatDate返回的是UTC格式的字符串,而不是GMT格式。尝试将formattedDate变量的设置更改为:

var formattedDate = date.toLocaleDateString('pl',{day:'2-digit',year:'numeric',month:'2-digit'});

2

您只需要删除行"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;
      }
  });

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接