【问题标题】:JQuery's DatePicker auto select weekdayJQuery 的 DatePicker 自动选择工作日
【发布时间】:2015-06-11 22:59:51
【问题描述】:

我正在使用 Jquery 的 Datepicker,并且在日历旁边有一组 5 个按钮来选择接下来的 1-5 天。我已经把周末变灰了,但是当我点击按钮时,他们仍然选择周末。如何让它忽略周末而只计算工作日? (例如,如果我在星期五点击 2 天,它应该选择星期二)

这是我的代码

$(function(){
  $('.rfq_ship_date').datepicker({
    beforeShowDay: $.datepicker.noWeekends
  });
});


$(".1day").click(function(){$(".rfq_ship_date").datepicker("setDate", "+1")});
$(".2day").click(function(){$(".rfq_ship_date").datepicker("setDate", "+2")});
$(".3day").click(function(){$(".rfq_ship_date").datepicker("setDate", "+3")});
$(".4day").click(function(){$(".rfq_ship_date").datepicker("setDate", "+4")});
$(".5day").click(function(){$(".rfq_ship_date").datepicker("setDate", "+5")});

编辑: 这是相关的HTML

  <div class="field">
    <%= f.label :ship_date %><br>
    <%= f.text_field :ship_date, class:"rfq_ship_date"%>
    <%= button_tag "1", class: "1day", type:"button" %>
    <%= button_tag "2", class: "2day", type:"button" %>
    <%= button_tag "3", class: "3day", type:"button" %>
    <%= button_tag "4", class: "4day", type:"button" %>
    <%= button_tag "5", class: "5day", type:"button" %>
  </div>

感谢任何帮助

【问题讨论】:

  • 为了清楚起见,您是否希望按钮 .1day、2day 等的点击事件突出显示日期选择器中所选日期之后的天数?作为建议,请为此示例提供 html 以使其更易于重现
  • 抱歉拖了这么久,我刚刚编辑了 HTML 的帖子

标签: javascript jquery jquery-ui jquery-ui-datepicker


【解决方案1】:

我认为这里已经回答了这个问题: Allow only the next 5 business days jquery datepicker

长话短说,如果您将“maxDate: '+1w'”作为参数添加到日期选择器,而周末关闭时,它将自动选择接下来的 5 天而不是 7 天,因为它只会计算业务天。

$('yourSelector').datepicker({
    minDate: 0, // your min date
    maxDate: '+1w', // one week will always be 5 business day - not sure if you are including current day
    beforeShowDay: $.datepicker.noWeekends // disable weekends
});

您还可以手动检查您选择的日期是周末还是节假日。与 isWeekend 和 isHoliday。代码已显示在这里: Add days after date is selected excluding weekends and holidays

【讨论】:

  • 如果选择 1 天会跳过周六和周日吗?
  • 您还可以手动检查您选择的日期是周末还是假期。与 isWeekend 和 isHoliday。代码已在此处显示:stackoverflow.com/questions/9533519/…
  • 据我了解,您的解决方案将阻止在日历中选择周末,可以在一年中的任何时间进行约会,但因为 99% 的时间属于接下来的 5工作日。在日历旁边有几个按钮会自动显示接下来的 5 个工作日之一会很有帮助。为了清楚起见,我添加了 HTML。
【解决方案2】:

我创建了一个演示,但我无法使用您的 HTML,因为它似乎是我不熟悉的动态语言。所以我只是创建了一些 HTML。基本上,这里的脚本将根据您按下的按钮突出显示从当前日期向前的天数

var dates = [];

$(function() {

  $('.rfq_ship_date').datepicker({
    numberOfMonths: [1, 1],
    beforeShowDay: highlightDays
  }).click(function() {
    $('.ui-datepicker-today a', $(this).next()).removeClass('ui-state-highlight ui-state-hover');
  });

  $('.1day').click(function() {
    createDateArray(1);
  });
  $('.2day').click(function() {
    createDateArray(2);
  });
  $('.3day').click(function() {
    createDateArray(3);
  });
  $('.4day').click(function() {
    createDateArray(4);
  });
  $('.5day').click(function() {
    createDateArray(5);
  });

  function highlightDays(date) {
    var noWeekend = $.datepicker.noWeekends(date);
    if (noWeekend[0]) {
      for (var i = 0; i < dates.length; i++) {
        if (dates[i].getTime() === date.getTime()) {
          return [true, 'highlight'];
        }
      }
      return [true, ''];
    } else {
      return noWeekend;
    }
  }

  function createDateArray(days) {
    dates = [];
    var today = new Date();
    today.setHours(0, 0, 0, 0);
    $(".rfq_ship_date").datepicker('setDate', today);
    var nextDay = today;
    dates.push(new Date(nextDay));

    for (var i = 1; i < days; i++) {
      nextDay.setDate(nextDay.getDate() + 1);

      if (nextDay.getDay() === 0) {
        nextDay.setDate(nextDay.getDate() + 1);
      } else if (nextDay.getDay() === 6) {
        nextDay.setDate(nextDay.getDate() + 2);
      }

      dates.push(new Date(nextDay));
    }
  }
});
.highlight > a.ui-state-default {
  background: url("images/ui-bg_highlight-soft_25_ffef8f_1x100.png") repeat-x scroll 50% top #FFEF8F !important;
  border: 1px solid #F9DD34;
  color: #363636;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://code.jquery.com/ui/1.11.4/jquery-ui.min.js"></script>
<link href="https://code.jquery.com/ui/1.11.4/themes/ui-darkness/jquery-ui.css" rel="stylesheet" />


<input type="text" class="rfq_ship_date" />
<input type="button" class="1day" value="1 day" />
<input type="button" class="2day" value="2 day" />
<input type="button" class="3day" value="3 day" />
<input type="button" class="4day" value="4 day" />
<input type="button" class="5day" value="5 day" />

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-05
    • 1970-01-01
    • 1970-01-01
    • 2020-04-27
    相关资源
    最近更新 更多