获取jQueryUI的datepicker中range之间的天数

Obtain the days between the range in the datepicker of jQueryUI

我正在使用 jQuery UIdate range picker,它运行良好。但现在我想也许获取范围之间天数的列表是有用的。这可能吗?

我手动定义了哪些月份有 30 天和 31 天,2 月有 28 天,并比较了起始日和结束日的年份。但我认为必须有一个更简单的选择。

很抱歉我没有代码可以显示,因为我不知道我必须使用什么函数或方法,因为我的代码可以正常工作,但我只是想也许有更好的选择。如果你认为这个问题对这个页面来说是一个糟糕的问题,请评论它,我会立即将其删除。

您可以使用 .setDate() 为日期对象执行此操作。

Expected values are 1-31, but other values are allowed:

  • 0 will result in the last day of the previous month
  • -1 will result in the day before the last day of the previous month

If the month has 31 days:

  • 32 will result in the first day of the next month

If the month has 30 days:

  • 32 will result in the second day of the next month

利用两个日期之间的天数差,您可以迭代并创建具有设置天数的新 Date 对象。

$(function() {
  var dateFormat = "mm/dd/yy";

  function getDate(element) {
    var date;
    try {
      date = $.datepicker.parseDate(dateFormat, element.value);
    } catch (error) {
      date = null;
    }

    return date;
  }

  function listDays(dta, dtb) {
    var result = [];
    if (dta == undefined || dtb == undefined) {
      console.log(dta, dtb);
      return [];
    }
    var dayDiff = (dtb - dta) / 86400000;
    var d = dta.getDate();
    var n = new Date(dta.setDate(d));
    for (var i = 0; i <= dayDiff; i++) {
      n = new Date(n.setDate(d));
      d++;
      if (d > 32) {
        d = 2;
      }
      result.push($.datepicker.formatDate(dateFormat, n));
    }
    return result;
  }

  var from = $("#from")
    .datepicker({
      defaultDate: "+1w",
      changeMonth: true,
      numberOfMonths: 3
    })
    .on("change", function() {
      to.datepicker("option", "minDate", getDate(this));
    }),
    to = $("#to").datepicker({
      defaultDate: "+1w",
      changeMonth: true,
      numberOfMonths: 3
    })
    .on("change", function() {
      from.datepicker("option", "maxDate", getDate(this));
      console.log(listDays(getDate(from[0]), getDate(this)));
    });
});
<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<label for="from">From</label>
<input type="text" id="from" name="from">
<label for="to">to</label>
<input type="text" id="to" name="to">