对于m = 1到12的范围,它按预期工作,将月份增加1。
对于m =范围13-不能按预期工作,将年份增加1。
作为m exceeds 12 inside loop
,我期待的结果是:
Sun Feb 28 2015 00:00:00 GMT+0400 (GET)
Tue Mar 28 2015 00:00:00 GMT+0400 (GET)
Sat Apr 28 2015 00:00:00 GMT+0400 (GET)
相反,我得到:
Sun Feb 28 2016 00:00:00 GMT+0400 (GET)
Tue Mar 28 2017 00:00:00 GMT+0400 (GET)
Sat Apr 28 2018 00:00:00 GMT+0400 (GET)
...
var loanAmount = 3800,
loanInterest = 32, // %
loanDuration = 48, // Month
loanGrace = 0,
loanFee = 1, // %
loanInitMonth = 0,
loanInitDay = 28,
loanInitYear = 2014;
var loanStart = new Date(loanInitYear,loanInitMonth,loanInitDay);
for (var m = loanInitMonth; m < loanDuration; m++) {
var d = loanStart;
d.setMonth(m);
console.log(m);
console.log(d);
}
Jsfiddle
如setMonth描述所示:
如果您指定的参数超出预期范围,则setMonth
尝试更新Date对象中的日期信息
相应地。例如,如果您将15用作monthValue,则年份将为
增加1(年+ 1),将3用作月份。
我显然没有得到这种行为。
浏览器Chrome。
最佳答案
执行此操作时,将引用复制到Date对象,而不是创建该对象的新副本:
var d = loanStart;
然后,当您更改
d
变量中的日期时,您也将更改loanStart
变量中的日期,因为它是同一对象。创建Date对象的副本:
var d = new Date(loanStart.getTime());
关于javascript - javascript setMonth()第二年错误的结果,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23854237/