Javascript 日期js无法添加月份

Javascript 日期js无法添加月份,javascript,jquery,datejs,Javascript,Jquery,Datejs,大家好,我使用Date js库,在添加额外月份时遇到问题 下面是我的简单代码: var durationMonth = $('#periodId').find(':selected').data('id'); // value => 3 m var startDate = $('#comencingDate').val(); // value -> 2015.12.14 $('#expiringDate').val(Date.parse(startDate + ' + ' + dur

大家好,我使用Date js库,在添加额外月份时遇到问题

下面是我的简单代码:

var durationMonth = $('#periodId').find(':selected').data('id'); // value => 3 m
var startDate = $('#comencingDate').val(); // value -> 2015.12.14
$('#expiringDate').val(Date.parse(startDate + ' + ' + durationMonth).toString("yyyy-MM-dd")); 
// This return 2016-03-03, but have to return 2016-03-13
这里有一个小演示

问题是只有几个月、几天和几年的工作时间。如果你有任何建议,我将很高兴听到。提前谢谢

预期结果:
2016-03-13


实际结果:
2016-03-03

将月份添加到日期会将日期月份重置为该月的第一天。因此,您需要从值中提取日部分,然后将其与月值相加

$('.change').on('click', function() {
            var durationMonth = $('#periodId').find(':selected').data('id');      
            var startDate = $('#comencingDate').val();
            $('#expiringDate').val(Date.parse(Date.parse(startDate).toString("dd") + ' + ' + durationMonth).toString("yyyy-MM-dd"));
});
工作示例:

更新:为了在未来一年的某个日期上添加一个月,您可以尝试以下操作:

$('.change').on('click', function() {
            var durationMonth = $('#periodId').find(':selected').data('id');      
            var startDate = $('#comencingDate').val();
      var monthDiff = Date.parse(startDate).getMonth() - new Date().getMonth()
       + (12 * (Date.parse(startDate).getFullYear() - new Date().getFullYear())); 

      var calcDate = Date.parse(Date.parse(startDate).toString("dd") + ' + ' + durationMonth).toString("yyyy-MM-dd");  

      if(monthDiff > 0)
      {
         var n_calcDate = new Date(calcDate);
         n_calcDate.setMonth(n_calcDate.getMonth() + monthDiff);
         n_calcDate.setDate(n_calcDate.getDate() + 1);
         calcDate = n_calcDate.toString("yyyy-MM-dd");
      }

            $('#expiringDate').val(calcDate);
});

工作示例:

请看是的,请重新阅读问题。哎呀。。。但无论如何,增加月份从来都不是一件精确的事情,因为月份的长度是可变的。一个月是28天吗?29? 30? 31? 2月28日的“1月31日+1个月”是什么?三月三号?2月28日+1个月是多少?3月28日?还是3月31日,因为你要从一个月的最后一天到下个月的最后一天。你需要使用一个图书馆,里面有这些东西,或者自己制作。就像其他人提到的,这是一个非常古老的图书馆,似乎没有积极的工作。或者加上几天。太混乱了。它也很古老,但我的图书馆确实增加了几个月:马克B的观点是:日期数学很奇怪。大约三年前,我重写了整个图书馆,因为我在这一方面遇到了一个非常曲折的兔子洞。这里有一篇关于思维过程的博客文章:当你考虑差异时,你在说什么顺序的改变、约定或绝对的、整体的价值?考虑到这一点,我已经烧掉了大量的脑细胞。为他们哭泣吧,我的朋友们!;^)美好的在2015-12-31的基础上增加2个月进行测试,我得到了我认为应该给我的结果。嗨,Dinmyte,做得好,但现在的问题是,如果我选择“从:2016-03-14开始”,然后选择“期限2个月”,结果是“2016-02-14”,但必须是“2016-05-14”。如何解决这个问题?谢谢。当使用助记符添加天数和月份时,javascript将当前年份作为默认值。为了让它在未来的任何一年都能正常工作,请遵循解决方案中的更新部分。希望能有帮助。谢谢@Dinmyte,你能给我看一些JSFIDLE的演示吗?再次感谢。