【问题标题】:jQuery UI Datepicker: restricting to fortnightjQuery UI Datepicker:限制为两周
【发布时间】:2014-06-13 01:52:06
【问题描述】:

我进行了一些搜索,但似乎无法找到我正在寻找的具体示例(JS 不是我的强项)。如果已经提供了另一个答案,我深表歉意,并将永远感谢您提供链接。

我目前正在用 PHP 构建一个薪酬计算器,我的首页上有日期选择器以确保一致性。我们每两周获得一次报酬,我只想让那些每两周一次的日期可供选择。我已经禁用了周六的所有日子,但它允许所有的周六。我想可能有一个 for 循环或者我可以用来从指定日期开始每隔一个星期六计算一次,以确保显示正确的日期,但正如我上面所说,我不熟悉 JS。 (我想从指定的日期开始计算,这样它会自动更新,我不必硬编码两周的日期。)

我的代码如下:

$(function() {
    $( "#datepicker" ).datepicker({
    showOn: "button",
    buttonImage: "images/calendar.gif",
    buttonImageOnly: true,
    dateFormat: "dd-mm-yy",
    beforeShowDay: nonWorkingDates,
});
function nonWorkingDates(date){
    var day = date.getDay(), Sunday = 0, Monday = 1, Tuesday = 2, Wednesday = 3, Thursday = 4, Friday = 5, Saturday = 6;
    var closedDays = [[Sunday], [Monday], [Tuesday], [Wednesday], [Thursday], [Friday],];
    for (var i = 0; i < closedDays.length; i++) {
    if (day == closedDays[i][0]) {
        return [false];
    }
    }
    return [true];
}
});

但多亏了巴德里,我把它精简到了:

$(function() {
    $( "#datepicker" ).datepicker({
    showOn: "button",
    buttonImage: "images/calendar.gif",
    buttonImageOnly: true,
    dateFormat: "dd-mm-yy",
    beforeShowDay: nonWorkingDates
});
function nonWorkingDates(date){
    if (date.getDay() != 6) {
        return [false, '', 'selected'];
    }
    return [true, ''];
}
});

作为一个相关问题(如果需要,我很乐意提出一个单独的问题),我可以让 datepicker 只显示您可以选择的日期吗?还是有人可以建议使用 datepicker 的替代方法来实现这一目标?

干杯

【问题讨论】:

  • 您不能为此使用maxDate 选项吗?

标签: javascript php jquery jquery-ui datepicker


【解决方案1】:

请参阅此常见问题解答,了解如何允许用户仅选择一周中的特定日期: http://jqfaq.com/how-to-restrict-date-selection-to-specifc-week-days-in-the-dropdown/

如果只允许从今天开始的每隔一个星期六,您的代码看起来会略有不同,如下所示:

function beforeShowDayHandler(date) {
    var today = new Date();
    if (date < today || date.getDay() != 6) {
        return [false, '', 'selected'];
    } else {
        var day = today.getDay();
        var comingSat = new Date();
        comingSat.setDate(comingSat.getDate() + 6 - day);
        var diffDays = dateDiffInDays(comingSat, date);
        var noOfWeeksAway = diffDays / 7;

        if ((noOfWeeksAway % 2 == false)) return [false, '', 'selected'];
    }
    return [true, ''];

}

功能齐全的小提琴在这里: http://jsfiddle.net/badri_cr/VNNYP/

【讨论】:

  • 我已经更改了我的代码,使其在此基础上更具可读性,非常感谢!我想启用指定日期的第二个星期六,即较早的两周结束日期,因此可用选项仅限于两周结束。
  • 好的,那么,您希望允许从指定日期开始的第 2、第 3 和每个星期六,或者您希望从指定日期开始允许第 2、第 4、第 6 等等?
  • 2 日、4 日、6 日等。例如,我们的下一个两周结束日期是 2014 年 6 月 28 日,所以我想要这个星期六(2014 年 6 月 21 日)和 7 月 5 日/ 2014 年被屏蔽,但 2014 年 7 月 12 日可用。因此,基本上将开始日期设置为 2014 年 6 月 28 日,然后为下一个可用日期 +14。如果这不是更清楚,我深表歉意。
  • 好的,我刚刚更改了上面的示例代码,还提供了完整小提琴的链接。请确认并标记为答案。
  • 我根据您发布的内容调整了功能代码,但是当我单击按钮时它不再显示日历。有什么建议吗?
【解决方案2】:

使用选项:

minDate: 0,
maxDate: '+14'

将日期选择器限制为下两周。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-04
    • 2011-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多