同一日期但不同月份的月份差异

时间:2019-05-16 07:45:11

标签: jquery

选择16-Jun-201916-May-2019来计算月份差;答案是0,但应该是1

如果第一个日期是19年5月16日,另一个日期是19年6月16日直到(但不包括)19年7月16日,那么结果应为1。

$("#lastAssimilationDate").datepicker({
  yearRange: "-20:+100",
  changeMonth: true,
  changeYear: true,
  dateFormat: "d-M-y"
});

$("#lastAssimilationDateOver").datepicker({
  yearRange: "-20:+100",
  changeMonth: true,
  changeYear: true,
  dateFormat: "d-M-y"
});

function monthDiff(d1, d2) {
  var months;
  months = (d2.getFullYear() - d1.getFullYear()) * 12;
  months -= d1.getMonth() + 1;
  months += d2.getMonth();
  return months <= 0 ? 0 : months;
}

$('button').click(function() {
  d1 = new Date($("#lastAssimilationDate").val());
  d2 = new Date($("#lastAssimilationDateOver").val());
  alert(monthDiff(d1, d2));
});
<script type="text/javascript" src="//code.jquery.com/jquery-1.9.1.js"></script>
<script type="text/javascript" src="//code.jquery.com/ui/1.9.2/jquery-ui.js"></script>
<link rel="stylesheet" type="text/css" href="//code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css">

<input type='text' id="lastAssimilationDate" />
<input type='text' id="lastAssimilationDateOver" />
<button>press</button>

http://jsfiddle.net/praveen_jegan/mB6B7/1/

2 个答案:

答案 0 :(得分:3)

因此,您需要以月为单位的绝对差异。

首先,不要在月份中添加1,即用months -= d1.getMonth() + 1;替换months -= d1.getMonth();

在示例中,d1.getMonth()将为5,而d2.getMonth()将为4。 区别是-1。

如果需要绝对差异,请将return months <= 0 ? 0 : months;替换为return months <= 0 ? -months : months;

在此示例中,结果将为1。

到目前为止的结果:

function monthDiff(d1, d2) {
    var months;
    months = (d2.getFullYear() - d1.getFullYear()) * 12;
    months -= d1.getMonth();
    months += d2.getMonth();
    return months <= 0 ? -months : months;
}

但是,这没有考虑到天数。 如果要考虑天数,可以使用getDate()。上述函数给出错误结果的唯一情况是,较早日期的天部分大于较晚日期的天部分。在这种情况下,我们需要从月份中减去1。

function monthDiff(d1, d2) {
    var months;
    if (d1 > d2) {
        months = monthDiff(d2,d1);
    } else {
        months = (d2.getFullYear() - d1.getFullYear()) * 12;
        months += d2.getMonth() - d1.getMonth();
        if (d1.getDate() > d2.getDate()) {
            months--;
        }
    }
    return months;
}

答案 1 :(得分:0)

我已经检查了您的代码。似乎那里有错误。 让我们看一下这段代码:

function monthDiff(d1, d2) {
   var months;
   months = (d2.getFullYear() - d1.getFullYear()) * 12;
   months -= d1.getMonth() + 1;
   months += d2.getMonth();
   return months <= 0 ? 0 : months;

}

当您使用d1.getMonth + 1减去月份时,就会发生该错误。

    months -= d1.getMonth() + 1;

您可以将代码更改如下:

function monthDiff(d1, d2) {
   var months;
   months = (d2.getFullYear() - d1.getFullYear()) * 12;
   months = months - d1.getMonth() + d2.getMonth();
   return months <= 0 ? 0 : months;

}

然后尝试输入2019年5月17日作为lastAssimilationDate输入并 2019年6月16日为lastAssimilationDateOver。

相关问题