Javascript setMonth显示不正确的日期
如果我的日期是2014年5月31日,那么如果我说date.setMonth(date.getMonth()+1)进入下一个月,我会得到2014年7月1日。我预计将于2014年6月30日到达。我猜这是因为六月没有31天,所以JavaScript尽可能避免错误 我编写了一个特殊的函数,根据计算结果在该日期对象上实际执行setDate、setMonth和setYear函数。似乎光是设定月并不能做正确的事情 想法Javascript setMonth显示不正确的日期,javascript,date,Javascript,Date,如果我的日期是2014年5月31日,那么如果我说date.setMonth(date.getMonth()+1)进入下一个月,我会得到2014年7月1日。我预计将于2014年6月30日到达。我猜这是因为六月没有31天,所以JavaScript尽可能避免错误 我编写了一个特殊的函数,根据计算结果在该日期对象上实际执行setDate、setMonth和setYear函数。似乎光是设定月并不能做正确的事情 想法 大卫你想从现在开始一个月吗?如果是这样,你得到的是正确的。从5月31日起的一个月是7月1日
大卫你想从现在开始一个月吗?如果是这样,你得到的是正确的。从5月31日起的一个月是7月1日,而不是6月30日。如果希望仅移动到第二个月,则仅取决于该月的天数: 例如:
2014年1月31日->2014年2月28日
或者您提到的案例,您可以使用一个小技巧,使用当前天数的最小值和下个月的天数来保持您在同一个月:
// Assume its yesterday
var date = new Date(2014, 4, 31);
// Get the current date
var currentDate = date.getDate();
// Set to day 1 to avoid forward
date.setDate(1);
// Increase month by 1
date.setMonth(date.getMonth() + 1);
// Get max # of days in this new month
var daysInMonth = new Date(date.getYear(), date.getMonth()+1, 0).getDate();
// Set the date to the minimum of current date of days in month
date.setDate(Math.min(currentDate, daysInMonth));
我只是遇到了同样的问题,我假设JS Date处理了我更改月数时的天数。我最终用了“瞬间”来代替。 参考: 添加月/日/等:
减去月/日/等:在“不合适”和“不是我想要的”之间有区别。无论如何,你的问题是什么?如果你阅读了,你会发现它需要第二个参数,
dayValue
。如果您没有指定,它将使用,这将返回5月31日的31
。显然,如果您将设置为June,但是它得到了dayValue
的31
,那么它被困在了一个不好的地方,因为June没有31天。好吧,我错过了第二个参数。为什么我们必须将一个“day”参数传递给一个期望设置“month”的函数,这对我来说有点奇怪。但我猜第二个param在幕后做的是我必须做的,才能让它工作。顺便说一句,我想我的问题很清楚,为什么我会得到7月1日,但无论如何…你是唯一一个似乎得到我的问题。是的,我做了和你相似的事。我甚至注意到windows日历在逐月运行时无法保持选定的日期。所以我很高兴我现在拥有的一切。感谢您的输入。当您尝试使用setMonth将月份设置为5月31日或一年中的任何31日时,请小心:var my_date=new date();我的日期。设定月(5)代码>会导致奇怪的行为,因为5(6月)只有30天时间将月份设置为7月(6日)。将此设置保存到所需的setMonth日期。