jQuery Datepicker-禁用周末/假日和未来三个工作日的组合

jQuery Datepicker-禁用周末/假日和未来三个工作日的组合,jquery,datepicker,Jquery,Datepicker,使用我可以从日期选择器禁用周末和假日 但是,我想将这与从今天起禁用接下来的三个工作日结合起来。简单地设置最短日期相对容易: var dateMin = new Date(); dateMin.setDate(dateMin.getDate() + 3); $(function() { $('#txtCollectionDate').datepicker( { beforeShowDay: noWeekendsOrHolidays, showOn: "both", dateFor

使用我可以从日期选择器禁用周末和假日

但是,我想将这与从今天起禁用接下来的三个工作日结合起来。简单地设置最短日期相对容易:

var dateMin = new Date();
dateMin.setDate(dateMin.getDate() + 3);
$(function() {

 $('#txtCollectionDate').datepicker(
 {
  beforeShowDay: noWeekendsOrHolidays,
  showOn: "both",
  dateFormat: "dd/mm/yy",
  firstDay: 1,
  changeFirstDay: false,
  minDate: dateMin
 });

});
但是,我真正需要的是一个计算工作日的函数:

var dateMin = new Date();
dateMin.setDate(AddBusinessDays(3));
任何能够转换为JavaScript的人都能找到解决方案

代码(为ASP道歉):


收款日期
jQuery日期选择器测试
确认后的表格
形式变量
价值
收集表格
选择收款日期
$(文档).ready(函数(){
var dateMin=新日期();
var weekDays=AddWeekDays(3);
dateMin.setDate(dateMin.getDate()+工作日);
var natDays=[
[1,1,‘英国’],
[12,25,‘英国’],
[12,26,‘英国’]
];
函数noWeekendsOrHolidays(日期){
var noWeekend=$.datepicker.noWeekends(日期);
if(noWeekend[0]){
返回国家日(日期);
}否则{
立即返回;
}
}
功能国家日(日期){
对于(i=0;i=工作日添加
daysToAdd=(5天)+daysToAdd
}
while(工作日添加!=0){
var week=工作日添加-5
如果(周>0){
daysToAdd=7+daysToAdd
weekDaysToAdd=weekDaysToAdd-5
}else{//周<0
daysToAdd=(5+周)+daysToAdd
weekDaysToAdd=weekDaysToAdd-(5+周)
}
}
返回日期添加;
}
$(“#日期选择器”)。日期选择器(
{
是的,
展览日前:现在是周末或节假日,
altField:“#txtCollectionDate”,
showOn:“两者”,
日期格式:“日/月/年”,
第一天:1,
第一天:错,
minDate:dateMin
});
});

我的案例非常接近,但我的想法是应该将工作日数添加到脚本中。 我从Junto示例中将AddWeekDays()替换为AddBusinessDays()。因此,在计算minday时,它会跳过所有非工作日。

//假日
var natDays=[
[1,1,‘英国’],
[12,25,‘英国’],
[12,26,‘英国’]
];
var dateMin=新日期();
var weekDays=AddBusinessDays(3);
dateMin.setDate(dateMin.getDate()+工作日);
函数AddBusinessDays(工作日添加){
var curdate=新日期();
var realDaysToAdd=0;
而(工作日添加>0){
curdate.setDate(curdate.getDate()+1);
realDaysToAdd++;
//检查当前日期是否为工作日
如果(noWeekendsOrHolidays(curdate)[0]){
平日添加--;
}
}
返回realDaysToAdd;
}
函数noWeekendsOrHolidays(日期){
var noWeekend=$.datepicker.noWeekends(日期);
if(noWeekend[0]){
返回国家日(日期);
}否则{
立即返回;
}
}
功能国家日(日期){
对于(i=0;i

修改上述代码,针对不同年份的不同日期使用,您可以使用

    <script>
     //holidays
        var natDays = [
            [11,1,2012, 'mx'],[11,2,2012, 'mx'],[11,19,2012, 'mx'],
            [12, 12, 2012, 'mx'],[12,20,2012, 'mx'],[12,25,2012, 'mx'],[12,31,2012, 'mx'],
            [1,2,2013, 'mx'],[1,3,2013, 'mx'],[1, 4, 2013, 'mx'],[1,1,2014, 'mx'],[1,2,2014, 'mx']
        ];

        var dateMin = new Date();
        var weekDays = AddBusinessDays(3);

        dateMin.setDate(dateMin.getDate() + weekDays);

        function AddBusinessDays(weekDaysToAdd) {
          var curdate = new Date();
          var realDaysToAdd = 0;
          while (weekDaysToAdd > 0){
            curdate.setDate(curdate.getDate()+1);
            realDaysToAdd++;
            //check if current day is business day
            if (noWeekendsOrHolidays(curdate)[0]) {
              weekDaysToAdd--;
            }
          }
          return realDaysToAdd;

        }

        function noWeekendsOrHolidays(date) {
            var noWeekend = $.datepicker.noWeekends(date);
            if (noWeekend[0]) {
                return nationalDays(date);
            } else {
                return noWeekend;
            }
        }
        function nationalDays(date) {
            for (i = 0; i < natDays.length; i++) {
                if (date.getMonth() == natDays[i][0] - 1 && date.getDate() == natDays[i][1] && date.getFullYear() == natDays[i][2]) {
                    return [false, '', 'No laboral ' + natDays[i][3]+'']; /* 'Holiday in ' + natDays[i][3] */
                }
            }
            return [true, ''];
        }

        $(function() {
            $( "#datepicker" ).datepicker({
                beforeShowDay: noWeekendsOrHolidays,
                altField: '#FI',
                dateFormat: "dd/mm/yy",
                defaultDate: '-0y',
                changeMonth: true,
                changeYear: true,
                minDate: new Date(2012, 1 - 1, 5),
                //minDate: "-1Y", 
                maxDate: "0Y",
                showWeek: true,
                firstDay: 0,
                showOn: "both",
                buttonImage: "images/calendar.gif",
                buttonText: "Seleccionar Fecha", /*Select date text */
                buttonImageOnly: true,
            });
            $(this).focus();
        });
    </script>

//假日
var natDays=[
[11,12012,[mx'],[11,22012,[mx'],[11,192012,[mx'],
[2012年12月12日,[12,202012,[mx'],[12,252012,[mx'],[12,312012,[mx'],
[1,22013,'mx'],[1,32013,'mx'],[1,4,2013,'mx'],[1,12014,'mx'],[1,22014,'mx']
];
var dateMin=新日期();
var weekDays=AddBusinessDays(3);
dateMin.setDate(dateMin.getDate()+工作日);
函数AddBusinessDays(工作日添加){
var curdate=新日期();
var realDaysToAdd=0;
而(工作日添加>0){
curdate.setDate(curdate.getDate()+1);
realDaysToAdd++;
//检查当前日期是否为工作日
如果(noWeekendsOrHolidays(curdate)[0]){
平日添加--;
}
}
返回realDaysToAdd;
}
函数noWeekendsOrHolidays(日期){
var noWeekend=$.datepicker.noWeekends(日期);
if(noWeekend[0]){
返回国家日(日期);
}否则{
立即返回;
}
}
功能国家日(日期){
对于(i=0;i    //holidays
    var natDays = [
      [1, 1, 'uk'],
      [12, 25, 'uk'],
      [12, 26, 'uk']
    ];

    var dateMin = new Date();
    var weekDays = AddBusinessDays(3);

    dateMin.setDate(dateMin.getDate() + weekDays);

    function AddBusinessDays(weekDaysToAdd) {
      var curdate = new Date();
      var realDaysToAdd = 0;
      while (weekDaysToAdd > 0){
        curdate.setDate(curdate.getDate()+1);
        realDaysToAdd++;
        //check if current day is business day
        if (noWeekendsOrHolidays(curdate)[0]) {
          weekDaysToAdd--;
        }
      }
      return realDaysToAdd;

    }

    function noWeekendsOrHolidays(date) {
        var noWeekend = $.datepicker.noWeekends(date);
        if (noWeekend[0]) {
            return nationalDays(date);
        } else {
            return noWeekend;
        }
    }
    function nationalDays(date) {
        for (i = 0; i < natDays.length; i++) {
            if (date.getMonth() == natDays[i][0] - 1 && date.getDate() == natDays[i][1]) {
                return [false, natDays[i][2] + '_day'];
            }
        }
        return [true, ''];
    }


    $('#datepicker').datepicker(
    {
        inline: true,
        beforeShowDay: noWeekendsOrHolidays,
        altField: '#txtCollectionDate',
        showOn: "both",
        dateFormat: "dd/mm/yy",
        firstDay: 1,
        changeFirstDay: false,
        minDate: dateMin
    });
    <script>
     //holidays
        var natDays = [
            [11,1,2012, 'mx'],[11,2,2012, 'mx'],[11,19,2012, 'mx'],
            [12, 12, 2012, 'mx'],[12,20,2012, 'mx'],[12,25,2012, 'mx'],[12,31,2012, 'mx'],
            [1,2,2013, 'mx'],[1,3,2013, 'mx'],[1, 4, 2013, 'mx'],[1,1,2014, 'mx'],[1,2,2014, 'mx']
        ];

        var dateMin = new Date();
        var weekDays = AddBusinessDays(3);

        dateMin.setDate(dateMin.getDate() + weekDays);

        function AddBusinessDays(weekDaysToAdd) {
          var curdate = new Date();
          var realDaysToAdd = 0;
          while (weekDaysToAdd > 0){
            curdate.setDate(curdate.getDate()+1);
            realDaysToAdd++;
            //check if current day is business day
            if (noWeekendsOrHolidays(curdate)[0]) {
              weekDaysToAdd--;
            }
          }
          return realDaysToAdd;

        }

        function noWeekendsOrHolidays(date) {
            var noWeekend = $.datepicker.noWeekends(date);
            if (noWeekend[0]) {
                return nationalDays(date);
            } else {
                return noWeekend;
            }
        }
        function nationalDays(date) {
            for (i = 0; i < natDays.length; i++) {
                if (date.getMonth() == natDays[i][0] - 1 && date.getDate() == natDays[i][1] && date.getFullYear() == natDays[i][2]) {
                    return [false, '', 'No laboral ' + natDays[i][3]+'']; /* 'Holiday in ' + natDays[i][3] */
                }
            }
            return [true, ''];
        }

        $(function() {
            $( "#datepicker" ).datepicker({
                beforeShowDay: noWeekendsOrHolidays,
                altField: '#FI',
                dateFormat: "dd/mm/yy",
                defaultDate: '-0y',
                changeMonth: true,
                changeYear: true,
                minDate: new Date(2012, 1 - 1, 5),
                //minDate: "-1Y", 
                maxDate: "0Y",
                showWeek: true,
                firstDay: 0,
                showOn: "both",
                buttonImage: "images/calendar.gif",
                buttonText: "Seleccionar Fecha", /*Select date text */
                buttonImageOnly: true,
            });
            $(this).focus();
        });
    </script>