kuchar
kuchar

Reputation: 637

Bootstrap datepicker - Pick 5 days without weekends

Hello i want to make datepicker with auto select five days without weekends. If user pick for example 27.07.2016 for the start date i want to select 5 days from it 28.07, 29.07, 01.08, 02.08, 03.08 If it is posible i want to display in input 27.08.2016 - 03.08.2016

So far i did something like this: Demo example http://jsfiddle.net/kuchar/hrzakorh/#&togetherjs=t3vznRU6eM

var date = new Date();
  var today = new Date(date.getFullYear(), date.getMonth(), date.getDate());
  var todaytime = new Date().toLocaleTimeString('pl-PL', {
    hour12: false,
    hour: "numeric",
    minute: "numeric"
  });
  if (todaytime <= '12:00:00'){
    $('#date-picker input').datepicker({
      language: "pl",
      multidateSeparator: " - ",
      maxViewMode: 0,
      multidate: true,
      daysOfWeekDisabled: "0,6",
      defaultDate: 1,
      startDate: '+1d',
    });
  }
  if (todaytime >= '12:00:00'){
    $('#date-picker input').datepicker({
      language: "pl",
      multidateSeparator: " - ",
      maxViewMode: 0,
      multidate: true,
      daysOfWeekDisabled: "0,6",
      defaultDate: 1,
      startDate: '+2d',
    });
  }

Calendar is on input i called "Wybierz datę".

Upvotes: 0

Views: 255

Answers (1)

Edu
Edu

Reputation: 2520

An aproximation should be...

function getDayAfterExcludingWeekEnds(dateParam,dayNum){
  var newDate = new Date( dateParam.getFullYear(), dateParam.getMonth(), dateParam.getDate() + dayNum);
  if (newDate.getDay() == 6){
    return getDayAfterExcludingWeekEnds( newDate, 2);
  }
  if (newDate.getDay == 0){
    return getDayAfterExcludingWeekEnds( newDate, 1);
  }
  return newDate;
}
$("#select").change(function() {
    var count = parseInt($(this).val().replace("ppl", ""));
    $("#npersons").html("");
    $(".dataTable").hide();
    for (var i = 0; i < count; i++) {
      var $row = $("#food").clone().prop("name", "foods" + i).show();
      $row.find("td").eq(0).html(i + 1);
      $("#persons #food").removeAttr('required');
      $("#npersons").append($row);
    }
    if (count > 0) {
      $(".dataTable").show();
    }
    });

  var date = new Date();
  var today = new Date(date.getFullYear(), date.getMonth(), date.getDate());
  var todaytime = new Date().toLocaleTimeString('pl-PL', {
    hour12: false,
    hour: "numeric",
    minute: "numeric"
  }),
  startDate = '+1d';
  if (todaytime > '12:00:00'){
    startDate = '+2d';
  }
  $('#date-picker input').datepicker({
    language: "pl",
    multidateSeparator: " - ",
    maxViewMode: 0,
    multidate: true,
    daysOfWeekDisabled: "0,6",
    defaultDate: 1,
    startDate: startDate 
  }).on('changeDate', function( event ) {
          if( event.dates.length > 1 && event.dates.length < 6){
            return;
          }
          var selectedDate = event.date,
          selectedDateAfterOne = getDayAfterExcludingWeekEnds( selectedDate, 1),
          selectedDateAfterTwo = getDayAfterExcludingWeekEnds( selectedDateAfterOne, 1),
          selectedDateAfterTree = getDayAfterExcludingWeekEnds( selectedDateAfterTwo, 1),
          selectedDateAfterFour = getDayAfterExcludingWeekEnds( selectedDateAfterTree, 1),
          dates = [selectedDate,selectedDateAfterOne,selectedDateAfterTwo,selectedDateAfterTree,selectedDateAfterFour];
          $('#date-picker input').datepicker('setDates',dates);
        });

Good luck

Upvotes: 1

Related Questions