没有周末和特定月份的Datepicker

时间:2017-02-02 19:46:37

标签: javascript datepicker

我一直试图在没有周末和特定月份的情况下做一个日期选择器。我可以让一个或另一个工作,但有一个问题试图让两者同时工作。 有什么建议吗? 这是我的小提琴...... https://jsfiddle.net/CreativeConcepts/39jtLhwm/

var RangeDates = ["4/1/2017, 6/30/2017", "11/1/2017, 12/31/2017", "4/1/2018, 6/30/2018", "11/1/2018, 12/31/2018", "4/1/2019, 6/30/2019", "11/1/2019, 12/31/2019",];
var RangeDatesIsDisable = true;
function DisableDays(date) {
var isd = RangeDatesIsDisable;
var rd = RangeDates;
var d = date.getDate();
var m = date.getMonth();
var y = date.getFullYear();
for (i = 0; i < rd.length; i++) {
    var ds = rd[i].split(',');
    var di, df;
    var d1, m1, y1, d2, m2, y2;

    if (ds.length == 1) {
        di = ds[0].split('/');
        d1 = parseInt(di[1]);
        m1 = parseInt(di[0]);
        y1 = parseInt(di[2]);
        if (y1 == y && m1 == (m + 1) && d1 == d) return [!isd];
    } else if (ds.length > 1) {
        di = ds[0].split('/');
        df = ds[1].split('/');
        d1 = parseInt(di[1]);
        m1 = parseInt(di[0]);
        y1 = parseInt(di[2]);
        d2 = parseInt(df[1]);
        m2 = parseInt(df[0]);
        y2 = parseInt(df[2]);

        if (y1 >= y || y <= y2) {
            if ((m + 1) >= m1 && (m + 1) <= m2) {
                if (m1 == m2) {
                    if (d >= d1 && d <= d2) return [!isd];
                } else if (m1 == (m + 1)) {
                    if (d >= d1) return [!isd];
                } else if (m2 == (m + 1)) {
                    if (d <= d2) return [!isd];
                } else return [!isd];
            }
        }
    }
}
return [isd];
}
$(document).ready(function() {
$("#datepicker").datepicker({
   minDate: 0,
   maxDate: null,
   dateFormat: 'MM dd, yy',
   beforeShowDay: DisableDays
  });
});

2 个答案:

答案 0 :(得分:1)

查看星期几并返回将允许您这样做。

if(date.getDay() == "6" || date.getDay() == "0" ){ return isd } 

https://jsfiddle.net/39jtLhwm/3/

答案 1 :(得分:0)

您可以使用内置功能过滤掉周末:

var noWeekend = $.datepicker.noWeekends(date);

我还为问题的无效月份部分找到了一个更简单的解决方案:

invalidMonths = [4,5,6,11,12];

function noInvalidMonths(date) {
  if(jQuery.inArray(date.getMonth()+1, invalidMonths)>-1){
    return [false, '']
  }
  return [true, ''];
}

有关完整的解决方案,请参阅this updated fiddle。感谢Adam Bellaire his answer to a related question