【问题标题】:jQuery datepicker custom rules help, pleasejQuery datepicker 自定义规则帮助,请
【发布时间】:2022-01-15 15:38:10
【问题描述】:

目前我有一个日期选择器:

如果在中午 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>

如何让它也排除一系列公共假期?

【问题讨论】:

    标签: jquery arrays jquery-ui date jquery-ui-datepicker


    【解决方案1】:

    它可能会帮助你....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
      });
    });
    

    (大卫沃尔什博客)

    【讨论】:

      【解决方案2】:

      我很快写了一个sn-p,我认为这是一个很好的大纲。我的主要观点是,有两种类型的国定假日:一种是每年在同一天(如圣诞节),另一种是在每年不同的日子(如复活节)。我不会在这里给你计算移动假期的逻辑,但是我的 sn-p 使用一个可以有两种假期的数组:month/day(用于静态)和month/day/year(用于更改)。你可以按照你想要的方式生成这个数组。

      测试将针对此数组运行,将数组的值转换为 Date 对象并使用 jQuery 的 inArray() 来查找匹配项。

      基本代码:

      //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 上成功测试。

      【讨论】:

        【解决方案3】:

        如您所见,jQuery UI 的 datePicker 可以使用辅助函数来整理是否可以选择给定日期。辅助函数接收一个日期。然后,您可以将您选择的任何逻辑应用于该日期,只要您返回具有单个 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/

        一些注意事项:
        + 您需要根据自己的喜好配置“假期”数组(我的有虚拟数据)
        + 我没有包括你的时间截止逻辑 - 它可以很容易地添加
        + 这是非常以美国为中心

        【讨论】:

        • 太棒了,正是我需要的...非常感谢!
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多