选择日期之后的日期不包括周末和假日 [英] Add days after date is selected excluding weekends and holidays

查看:134
本文介绍了选择日期之后的日期不包括周末和假日的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有两个文本字段。在第一个文本框中,我使用jQueryUI Datepicker添加了一个日历。当用户从datepicker中选择日期时,应自动将日期添加30天,并将其设置为第二个文本域。我有这个工作要添加30天的日期。



但是,它应该排除周末和假期,只显示30个工作日。如何做到这一点?

  if($('#cat option:selected')。 ){
var date_billed = $('#datebilled')。datepicker('getDate');
var date_overdue = new Date();
date_overdue.setDate(date_billed.getDate()+ 30);
date_overdue = $ .datepicker.formatDate('mm / dd / yy',date_over);
$('#datepd')。val(date_over).prop('readonly',true);
}

更新:我已经添加了noWeekendsOrHolidays的功能禁止周末或假期。有没有办法我可以使用这个函数来计算和添加工作日期?

  //假期
var natDays = [
[7,4,'us']
];

函数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,''];
}


解决方案

解决了!这个答案 here 非常有帮助。



代码:

 函数AddBusinessDays(weekDaysToAdd){
var curdate = new Date();
var realDaysToAdd = 0;
while(weekDaysToAdd> 0){
curdate.setDate(curdate.getDate()+ 1);
realDaysToAdd ++;
//检查当前日是否是营业日
如果(noWeekendsOrHolidays(curdate)[0]){
weekDaysToAdd--;
}
}
return realDaysToAdd;

}


var date_billed = $('#datebilled')。datepicker('getDate');
var date_overdue = new Date();
var weekDays = AddBusinessDays(30);
date_overdue.setDate(date_billed.getDate()+ weekDays);
date_overdue = $ .datepicker.formatDate('mm / dd / yy',date_over);
$('#datepd')。val(date_over).prop('readonly',true);


I have two text fields. In the first textfield I have added a calendar using jQueryUI Datepicker. When the user selects the date from the datepicker, it should automatically add 30 days to the date and set this value in the second textfield. I've got this working to add 30 days to the date.

However, it should exclude weekends and holidays and display only 30 business days. How do I do this?

if ($('#cat option:selected').text() == "ABC") {
    var date_billed = $('#datebilled').datepicker('getDate');
    var date_overdue = new Date();
    date_overdue.setDate(date_billed.getDate() + 30);
    date_overdue = $.datepicker.formatDate('mm/dd/yy', date_overdue);
    $('#datepd').val(date_overdue).prop('readonly', true);
}

Update: I have added the function noWeekendsOrHolidays to disable weekends or holidays. Is there anyway I can use this function to calculate and add business days to the date?

//holidays
            var natDays = [
              [7, 4, 'us']
            ];

            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, ''];
            }

解决方案

Solved it! This answer here helped tremendously.

Code:

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;

    }


var date_billed = $('#datebilled').datepicker('getDate');
var date_overdue = new Date();
var weekDays = AddBusinessDays(30);
date_overdue.setDate(date_billed.getDate() + weekDays);
date_overdue = $.datepicker.formatDate('mm/dd/yy', date_overdue);
$('#datepd').val(date_overdue).prop('readonly', true);

这篇关于选择日期之后的日期不包括周末和假日的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆