Javascript setMonth显示不正确的日期

时间:2014-06-01 03:29:26

标签: javascript date

如果我的日期是2014年5月31日,那么如果我说date.setMonth(date.getMonth()+ 1)到达下个月,我将在2014年7月1日到期。我希望能够获得6月我想这是因为六月没有31天,所以JavaScript最好避免错误。

我编写了一个特殊的函数来实际根据计算对该日期对象执行setDate,setMonth和setYear函数。似乎单独的setMonth没有做正确的事。

观,

大卫

2 个答案:

答案 0 :(得分:7)

你想从现在起1个月?如果是这样,你得到的是正确的。从5月31日开始的1个月是7月1日,而不是6月30日。如果您希望它仅根据本月的天数移至第二个月:

Ex:Jan 31st 2014 -> Feb 28th 2014 或者你提到的情况,你可以使用一个小的黑客来使用当天的最小天数和下个月的天数让你在同一个月内:

// 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));

答案 1 :(得分:0)

我只是遇到了同样的问题,我以为当我更改月份数​​时,JS Date为我处理了天数。我最终改为使用矩。 参考:

添加月/日/等:https://momentjs.com/docs/#/manipulating/add/

减去月/日/等:https://momentjs.com/docs/#/manipulating/subtract/