jquery ui datepicker根据一天中的时间更改日期

时间:2015-09-30 18:44:48

标签: jquery jquery-ui-datepicker

我正在为一位朋友开店。他们非常具体的运输标准,我需要使用datepicker。唯一的周一,周三和周五。此外,在这些日子的每个中午12点,选择器需要将下一个可用日期更改为下一个星期一。星期三,。或周五示例:如果是星期三中午12点,最快的人可以选择作为日期的是下一个星期一。那个星期五下午12点将无法使用。

我找到了应该添加此功能的代码片段,但不知道如何将它们添加到我当前用于使更改生效的代码中。

这是我目前的代码:

jQuery(function() {
jQuery("#date").datepicker( { 
beforeShowDay: nonWorkingDates,
    numberOfMonths: 1,
    minDate: +2,
    maxDate: '+6M',
    firstDay: 1

});

function nonWorkingDates(date){
    var day = date.getDay(), Sunday = 0, Monday = 1, Tuesday = 2, Wednesday = 3, Thursday = 4, Friday = 5, Saturday = 6;
    var closedDates = [[7, 29, 2009], [8, 25, 2010]];
  var closedDays = [[Tuesday], [Thursday], [Saturday], [Sunday]];
    for (var i = 0; i < closedDays.length; i++) {
        if (day == closedDays[i][0]) {
            return [false];
        }

    }

    for (i = 0; i < closedDates.length; i++) {
        if (date.getMonth() == closedDates[i][0] - 1 &&
        date.getDate() == closedDates[i][1] &&
        date.getFullYear() == closedDates[i][2]) {
            return [false];
        }
    }

    return [true];
}




]);

请尽可能具体说明。我是一个代码菜鸟。我可以复制并粘贴到特定位置的东西是理想的。

1 个答案:

答案 0 :(得分:0)

基本上,您只需要确定传入的日期是否是下一个交付日。如果是,并且它已经过了中午,则禁用该日期。我相信拥有更多经验的人可以更优雅地做到这一点,但我的出现至少在今天工作(周三,过去中午,并且周五黑了)。

jQuery(function () {
    jQuery("#date").datepicker({
        beforeShowDay: nonWorkingDates,
        numberOfMonths: 1,
        minDate: +2,
        maxDate: '+6M',
        firstDay: 1
    });

    function nonWorkingDates(date) {

        var day = date.getDay(),
            Sunday = 0, Monday = 1, Tuesday = 2, Wednesday = 3,
            Thursday = 4, Friday = 5, Saturday = 6;

        var closedDates = [ [7, 29, 2009], [8, 25, 2010] ];

        var closedDays = [
            [Tuesday], [Thursday], [Saturday], [Sunday]
        ];

        for (var i = 0; i < closedDays.length; i++) {
            if (day == closedDays[i][0]) {
                return [false];
            }
        }

        for (i = 0; i < closedDates.length; i++) {
            if (date.getMonth() == closedDates[i][0] - 1 && date.getDate() == closedDates[i][1] && date.getFullYear() == closedDates[i][2]) {
                return [false];
            }
        }

        var currentDay = new Date();

        //if it's not past noon, we don't need to do the next check
        //so return true
        var currentHour = currentDay.getHours();
        if (currentHour < 12) {
            return [true];
        }

        //determine if the date passed in is the next delivery day
        var nextDeliveryDay = 0

        switch (date.getDay()) {
            case 1:
                nextDeliveryDay = 3;
                break;

            case 3:
            case 5:
                nextDeliveryDay = 2;
                break;
        }

        //if date minus the number of days to the next delivery date
        //equals today's date, then return false
        var testDate = new Date(date);
        testDate.setDate(testDate.getDate() - nextDeliveryDay);

        //normalize the time of day for comparison
        currentDay.setHours(0,0,0,0);

        if (testDate.getTime() == currentDay.getTime()) {
            return[false];
        }

       return [true];
    }
});