2011-04-16 35 views
3

目前我有一個日期選擇器,其中:jQuery datepicker自定義規則的幫助,請

不包括今天,如果在中午12:00之後。

排除週日。

<script type="text/javascript"> 
$(function() { 


      // get today's date 
      var myDate = new Date(); 
      // add one day if after 12:00 
      if (myDate.getHours() > 12) { 
         myDate.setDate(myDate.getDate()+1); 
      } else { 
       myDate.setDate(myDate.getDate()+0); 

      }; 

      $("#delivery-date-textbox").datepicker({ 
      dateFormat: 'dd-mm-yy', 
      minDate: myDate, 
      beforeShowDay: function(date){ return [date.getDay() != 0,""]} 

      }); 
      }); 
</script> 

我怎樣才能使它也排除公衆假期的陣列?

回答

2

我很快就寫了一個SN我認爲這是一個很好的概要。我的主要觀點是,有兩種類型的國家法定節假日:每年都落在同一天(如聖誕節)的人以及那些落在每年(如復活節)不同天。我不會在這裏給你的邏輯來計算移動假日,但我的代碼片段,其中一個陣列,可以有兩種假期的工作原理:month/day(靜態)和month/day/year(改變)。你可以按照你想要的方式生成這個數組。

測試將運行鍼對這個數組,數組的值轉換成Date對象,並使用jQuery的​​找到匹配。

Basic代碼:

//an array of holidays, defined here, ajaxed or anything 
var holidays=['12/24', '1/1', '5/10/2011', '5/25']; 

//a function that decides whether a date is a holiday 
function isHoliday(date, holidays) { 
    var parts, dateArray=[]; 
    //build Dates from the array 
    for (var i=0; i<holidays.length; i++) { 
     parts=holidays[i].split('/'); 
     if (parts.length==2) { 
      dateArray.push(new Date(date.getFullYear(), parts[0]-1, parts[1]).getTime()); 
     } else if (parts.length==3) { 
      dateArray.push(new Date(holidays[i]).getTime()); 
     } else { 
      return false; 
     } 
    } 
    return $.inArray(date.getTime(), dateArray)!=-1; 
} 

$('#fos').datepicker({ 
    dateFormat: 'dd-mm-yy', 
    beforeShowDay: function(date){ 
     //handling sundays 
     if (date.getDay() == 0) { 
      return [false]; 
     } 
     //handling holidays 
     if (isHoliday(date, holidays)) { 
      return [false]; 
     } 
     return [true]; 
    } 
}); 

而一個jsFiddle Demo。在Chrome和FF4上成功測試。

7

它可以幫助你.... Click here

/* create an array of days which need to be disabled */ 
var disabledDays = ["2-21-2010","2-24-2010","2-27-2010","2-28-2010","3-3-2010","3-17-2010","4-2-2010","4-3-2010","4-4-2010","4-5-2010"]; 

/* utility functions */ 
function nationalDays(date) { 
    var m = date.getMonth(), d = date.getDate(), y = date.getFullYear(); 
    //console.log('Checking (raw): ' + m + '-' + d + '-' + y); 
    for (i = 0; i < disabledDays.length; i++) { 
    if($.inArray((m+1) + '-' + d + '-' + y,disabledDays) != -1 || new Date() > date) { 
     //console.log('bad: ' + (m+1) + '-' + d + '-' + y + '/' + disabledDays[i]); 
     return [false]; 
    } 
    } 
    //console.log('good: ' + (m+1) + '-' + d + '-' + y); 
    return [true]; 
} 
function noWeekendsOrHolidays(date) { 
    var noWeekend = jQuery.datepicker.noWeekends(date); 
    return noWeekend[0] ? nationalDays(date) : noWeekend; 
} 
/* create datepicker */ 
jQuery(document).ready(function() { 
    jQuery('#date').datepicker({ 
    minDate: new Date(2010, 0, 1), 
    maxDate: new Date(2010, 5, 31), 
    dateFormat: 'DD, MM, d, yy', 
    constrainInput: true, 
    beforeShowDay: noWeekendsOrHolidays 
    }); 
}); 

(大衛·沃爾什博客)

1

正如你所看到的,jQuery的用戶界面的日期選擇器可以採取輔助FUNC理清是否沒有給定的日期可以選擇。助手func收到一個日期。然後,只要您返回一個具有單一bool值的數組,就可以將所選的邏輯應用到該日期。

這裏是我在過去所做的那樣......沒有特別性感的變體,但它的工程!

//returns a single-item array of true or false. False disables the given date (un-pick-able!) 
isWorkingDay = function isWorkingDay(date) { 
    var day = date.getDay(), 
     d = date.getDate(), 
     m = date.getMonth() + 1, 
     yyyy = date.getFullYear(), 
     dateStr = m + "/" + d + "/" + yyyy, 
     weekendDays = [0, 6], 
     holidays = ["5/3/2011", "5/24/2011", "5/26/2011"]; 

    //filter out holidays 
    for (var i = 0; i < holidays.length; i = i + 1) { 
     if (dateStr === holidays[i]) { 
      return [false]; 
     } 
    } 

    //filter out weekends (e.g. Saturday & Sunday) 
    for (var i = 0; i < weekendDays.length; i = i + 1) { 
     if (day === weekendDays[i]) { 
      return [false]; 
     } 
    } 
    return [true]; 
}; 


$(document).ready(function() { 
    //initialize datepicker 
    $("input.calendar").datepicker({ 
     beforeShowDay: isWorkingDay 
    }); 
}); 

我也把一個工作演示 - 點擊此處查看:http://jsfiddle.net/2uCxh/

一些注意事項:
+您需要的「假日」陣列配置根據自己的喜好(該礦擁有虛擬數據)
+我不包括你的時間截止邏輯 - 它可以很容易地添加
+這是非常美國爲中心的

+0

那輝煌的,我需要的是什麼?非常感謝! – 2011-05-10 13:05:32