2011-04-16 39 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