3

私はjQuery UIの日付ピッカーを使用しており、beforeShowDayでnoWeekendsメソッドを使用して週末を選択できないようにしています。これに関連して、今日の日付から 5 日間と -5 日間の最小日付と最大日付を設定したいと思います。

私が抱えている問題は、その 5 日間に週末を含めたくないということです。一般的な日ではなく、最小および最大で 5 選択可能な日にしたいと考えています。min および maxdate の範囲で無効になっていない日付のみを計算したい。

例: 過去 45 日間に 2 日間無効になった場合、45 の心数は実際には 47 になります (無効な日付が含まれている場合)。

http://jsfiddle.net/corydorning/8mp5W/

// what I need
$('.date').datepicker({
    maxDate: 5, // 5 selectable days
    minDate: -5, // -5 selectable days
    beforeShowDay: $.datepicker.noWeekends
});

注:週末だけでなく、無効な日付を考慮したソリューションを探しています。この例では、最も簡単に表現でき、jQuery UI に組み込まれている週末を使用しました。

4

2 に答える 2

0

次のコードを試すことができます: get_date() は私のコードで ajax を介して呼び出しています。配列を作成できます。そこに日付を入力します。

window.natDays = [];
$.ajax({
  type : "POST",
  async : false,
  url : rootPath + '/get_date',
  data : "ajax=true",
  success : function(msg) {
    var a = $.parseJSON(msg);
    $i = 0;
    $.each(a, function(key, value) {
      arr = (value.Date['date']).split('-');
      arr2[key] = new Array(value.Date['month'], arr[2],
          value.Date['occassion']);
    });
    natDays = arr2;
  }
});
var dateMaxforswitch = new Date();
dateMinforswitch.setDate(dateMinforswitch.getDate()
    + (dateMinforswitch.getHours() >= 17 ? 1 : 0));
dateMaxforswitch.setDate(dateMaxforswitch.getDate()
    + (dateMaxforswitch.getHours() >= 17 ? 1 : 0));
AddBusinessDays(dateMaxforswitch, 25);

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

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++) {// alert(natDays[i][2]);
    if (date.getMonth() == natDays[i][0] - 1 && date.getDate() == natDays[i][1]) {
      return [ false, natDays[i][2] + '_day' ];
    }
  }
  return [ true, '' ];
}
于 2014-02-11T07:43:42.370 に答える