选择16-Jun-2019
和16-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>
答案 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。