1

我一直在尝试为我的表单创建验证。我一直在寻找如何在日期时间选择器和假期中禁用周末。我正在使用来自 Trentrichardson http://trentrichardson.com/examples/timepicker/的这个 Jquery 脚本

我是 JS 的新手,因为我找不到让这段代码工作的方法,所以我要拔掉头发了:

$(document).ready(function(){
    $('.timepicker').datetimepicker({ beforeShowDay: $.datepicker.noWeekends });

    var natDays = [
    [2, 26, 'ph'], [2, 6, 'ph'], [2, 17, 'ph']
    ];

    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++) {
            if (date.getMonth() == natDays[i][0] - 1
            && date.getDate() == natDays[i][1]) {
                return [false, natDays[i][2] + '_day'];
            }
        }
        return [true, ''];
    }


});

我昨天找到了这段代码,这是正确的答案(可以让 jQuery UI Datepicker 禁用周六和周日(和节假日)吗?),但我无法让它工作。它不显示假期,但周末已被禁用(工作)。

有任何想法吗?

4

1 回答 1

0

检查日期是周六还是周日不需要单独的函数:

if (date.getDay() % 6) {
  // date is not a weekend
} else {
  // date is a weekend
}

检查公共假期(由于日期每年和地点都在变化,这可能会更加困难)也很容易。以设定的格式创建日期列表(ISO8601 很方便),然后您可以针对当前日期进行测试:

// You may have a function like this already
// d is a javascript Date object
function dateToISO(d) {
  function z(n){return (n<10? '0':'')+n}
  return d.getFullYear() + '-' +
         z(d.getMonth() + 1) + '-' + 
         z(d.getDate());
}

// s is a date string in ISO8601 format
function isPublicHoliday(s) {
  var holidays = '2012-12-25 2012-12-26'; // list holidays
  var m = holidays.match(s);
  return !!(m && m.length);
}

isPublicHoliday(dateToISO(date));  // true for 2012-12-25

当然,您会希望以不同的方式实现上述内容,但它为您提供了要点。大概日期选择器返回一个日期对象,或者您可以测试的格式化字符串。对字符串进行测试非常快,并且可以节省大量使用数组和函数的麻烦。也很容易维护,因为日期非常易于阅读。

于 2013-02-18T03:30:59.647 回答