使用 jquery 以 (mm/dd/yyyy) 格式获取两个日期之间的月差

Ale*_*111 4 html javascript jquery date

我想检索用户使用引导程序日期选择器输入的两个日期之间的月份差异。除此之外,我还尝试将第二个值 (date2) 替换为用户单击计算按钮时的月份差异。尝试处理此问题时,我的代码似乎不起作用...

这是我到目前为止所拥有的:

$('#clickMe').click(function() {
    var date1 = $('#firstPayDate');
    var date2 = $('#loanTrm');
    var timeDiff = Math.abs(date2.getTime() - date1.getTime());
    var diffMonths = Math.ceil(timeDiff / (1000 * 3600 * 24)); 
    date2.val(date2.val().replace(diffMonths));
});
Run Code Online (Sandbox Code Playgroud)

这是我试图完成的图片演示:

在此处输入图片说明

我试图找出这两个条目之间的差异(到期日 - 首次付款日期)

在此处输入图片说明 我试图在用户单击计算按钮后进行计算,月份的差异将替换为在到期日期中输入的值。

任何帮助将不胜感激!

Ano*_*aac 6

下面的逻辑会在几个月内有所不同

(endDate.getFullYear()*12+endDate.getMonth())-(startDate.getFullYear()*12+startDate.getMonth())
Run Code Online (Sandbox Code Playgroud)


Dan*_*eck 5

人类日历不利于简单的数学计算——幸运的是,javascript 提供了一个 Date 对象,它为我们完成了大部分的脏活。

这会将日期字符串转换为 Date 对象(忽略输入字段内容的任何格式或验证问题。请注意,在您的特定情况下,由于您打算#loanTrm用月数而不是日期替换的值,这将如果用户点击“计算”两次,则中断;更正这更多的是用户界面问题而不是编码问题,所以我暂时忽略它):

var date1 = new Date($('#firstPayDate').val());
var date2 = new Date($('#loanTrm').val());
var datediff = date2 - date1; 
Run Code Online (Sandbox Code Playgroud)

(正如在下面的评论中指出的,还要注意 Date 使用用户的语言环境来确定预期的日期格式:如果您总是以 mm/dd/yy 显示日期,那么您可能不应该这样做,因为大部分世界使用 dd/mm/yy。您还需要根据用户区域设置格式化输入字段,或者使用更明确的new Date(year, month, day, hours, minutes, seconds, milliseconds)而不是我上面显示的字符串快捷方式构建您的日期。)(就像我说的:约会很难!等到你尝试时区,它们会更有趣)

datediff 现在包含两个日期之间的实际差异(以毫秒为单位)。

接下来会发生什么取决于您所说的“月份差异”的确切含义,因为月份的长度并不总是相同。

如果您不关心精度,则可以通过假设每个月有 30 天并除以datediff(1000*60*60*24*30)来获得可能接近的近似值。如果您确实关心精度,那么您已经走出了自己的领域,可能应该使用专门用于此类数学的库之一(momentjs 是一个很好的库。)

(还有许多其他 SO 问题涵盖了此类问题;其中任何一个依赖于字符串匹配而不是 Date() 的答案至少每四年都会出错一次,而且可能更频繁。)