Javascript 在Bootstrap Datepicker中添加天数时如何排除周末?

Javascript 在Bootstrap Datepicker中添加天数时如何排除周末?,javascript,jquery,twitter-bootstrap,datepicker,Javascript,Jquery,Twitter Bootstrap,Datepicker,我使用引导日期选择器。在选择日期时,我想将所选日期+3添加到文本框中,不包括周末(可能还有一些随机的假日日期)。因此,如果选择的日期是Fri,25th,那么文本框值应该是Wed,30th。这是我当前的脚本: $('.date_get .date').datepicker({ startView : 0, todayBtn : "linked", forceParse : false, autoclose

我使用引导日期选择器。在选择日期时,我想将所选日期+3添加到文本框中,不包括周末(可能还有一些随机的假日日期)。因此,如果选择的日期是Fri,25th,那么文本框值应该是Wed,30th。这是我当前的脚本:

$('.date_get .date').datepicker({
    startView           : 0,
    todayBtn            : "linked",
    forceParse          : false,
    autoclose           : true,
    endDate             : "now",
    format              : "dd/mm/yyyy",
    todayHighlight      : true,
    daysOfWeekDisabled  : [0,6]
}).on('changeDate', function (selected) {

    //DATE 2 = DATE 1 + 3 Days
    var tgl = new Date(selected.date.valueOf() + (1000 * 60 * 60 * 24 * 3)); //Chosen date +3 days

    var hr  = tgl.getDate();
    var bln = tgl.getMonth() + 1; //Januari == 0

    if(bln <10)
    bln = "0"+bln;
    else
    bln = bln;

    var thn      = tgl.getFullYear();
    var hari_ini = hr + "/" + bln + "/" + thn;

    $('.date_tgt').val(hari_ini);
});
$('.date\u get.date')。日期选择器({
startView:0,
今日BTN:“链接”,
forceParse:false,
自动关闭:是的,
结束日期:“现在”,
格式:“dd/mm/yyyy”,
今天的亮点:没错,
daysOfWeekDisabled:[0,6]
}).on('changeDate',函数(已选择){
//日期2=日期1+3天
var tgl=新日期(selected.Date.valueOf()+(1000*60*60*24*3));//所选日期+3天
var hr=tgl.getDate();
var bln=tgl.getMonth()+1;//Januari==0

如果(bln您需要使用
setDate
函数添加三天。 试试这个

您可以使用获取javascript。例如:

var selectedDate = moment(new Date(selected.date.valueOf()); //create moment instance
var dayOfWeek = selectedDate.day(); //will return 0-6, represent sunday-saturday
然后,您可以制作算法来调整您的需求,例如将一周中的某一天(0-6)映射到其附加值。如下所示:

var addedDays = [3, 3, 3, 5, 5, 5, 4]
//example: 
var selectedDate = moment("2017-01-13"); //friday last week
var resultDate = selectedDate.add(addedDays[selectedDate.Day()], 'days');
//resultDate = 13th (friday) + 5 days = 18th (wednesday)

如果我理解正确,你可以试试这个

  var date1 = new Date("Jan 20 2017 12:00:00 GMT+0800"); 
  var date2 = new Date(); 
  date2.setDate(date1.getDate()+5); //added 5 days
  var answer= dateDifference(date1,date2); 

  console.log(answer);

 function dateDifference(start, end) {

  // Copy date objects so don't modify originals
  var s = new Date(+start);
  var e = new Date(+end);
  var flag = new Date(+start);
  var numberOfWeekEnds = 0; 

  // Set time to midday to avoid dalight saving and browser quirks
  s.setHours(12,0,0,0);
  e.setHours(12,0,0,0);

  // Get the difference in whole days
  var totalDays = Math.round((e - s) / 8.64e7);

  // Get the difference in whole weeks
  var wholeWeeks = totalDays / 7 | 0;

  // Estimate business days as number of whole weeks * 5
  var days = wholeWeeks * 5;

  // If not even number of weeks, calc remaining weekend days
  var lasta
  if (totalDays % 7) {
    s.setDate(s.getDate() + wholeWeeks * 7);

    while (s < e) {
      s.setDate(s.getDate() + 1);

      // modified
      if (s.getDay() != 0 && s.getDay() != 6) {
        flag.setDate(flag.getDate() + 1 +numberOfWeekEnds);
        numberOfWeekEnds = 0
      }
      else{
        numberOfWeekEnds++;
      }
    }
  }
  return flag;
}
var date1=新日期(“2017年1月20日12:00:00 GMT+0800”);
var date2=新日期();
date2.setDate(date1.getDate()+5);//增加了5天
var answer=日期差(日期1,日期2);
控制台日志(应答);
函数日期差(开始、结束){
//复制日期对象,以便不修改原件
var s=新日期(+开始);
var e=新日期(+结束);
var标志=新日期(+开始);
var numberOfWeekEnds=0;
//将时间设置为正午,以避免dalight保存和浏览器怪癖
s、 设定时间(12,0,0,0);
e、 设定时间(12,0,0,0);
//在一整天中获得差异
var totalDays=数学四舍五入((e-s)/8.64e7);
//在整周内获得差异
var wholeWeeks=总天数/7 | 0;
//估计工作日为整周数*5
变量天数=整周*5;
//如果不是偶数周,则计算剩余周末天数
瓦拉斯塔
如果(总天数%7){
s、 setDate(s.getDate()+整周*7);
而(s
基本上,我所做的是修改了这个函数来检查一天是否是工作日


你可以玩
date1
date2
来进一步检查。

什么是addedDays?如果选择的日期是14号星期六,那么加上5天就是19号星期四。它应该仍然是18号星期三,这是一周中每一天要加的金额。如果我们使用moment.js的默认值,星期天=0,星期一=1,星期二=2,等等。所以,我有数组
addedDays
带有与星期几相关的索引,包含要添加的天数的值,以便可以根据需要正确计算(+3天不包括周末)。
  var date1 = new Date("Jan 20 2017 12:00:00 GMT+0800"); 
  var date2 = new Date(); 
  date2.setDate(date1.getDate()+5); //added 5 days
  var answer= dateDifference(date1,date2); 

  console.log(answer);

 function dateDifference(start, end) {

  // Copy date objects so don't modify originals
  var s = new Date(+start);
  var e = new Date(+end);
  var flag = new Date(+start);
  var numberOfWeekEnds = 0; 

  // Set time to midday to avoid dalight saving and browser quirks
  s.setHours(12,0,0,0);
  e.setHours(12,0,0,0);

  // Get the difference in whole days
  var totalDays = Math.round((e - s) / 8.64e7);

  // Get the difference in whole weeks
  var wholeWeeks = totalDays / 7 | 0;

  // Estimate business days as number of whole weeks * 5
  var days = wholeWeeks * 5;

  // If not even number of weeks, calc remaining weekend days
  var lasta
  if (totalDays % 7) {
    s.setDate(s.getDate() + wholeWeeks * 7);

    while (s < e) {
      s.setDate(s.getDate() + 1);

      // modified
      if (s.getDay() != 0 && s.getDay() != 6) {
        flag.setDate(flag.getDate() + 1 +numberOfWeekEnds);
        numberOfWeekEnds = 0
      }
      else{
        numberOfWeekEnds++;
      }
    }
  }
  return flag;
}