Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript setMonth显示不正确的日期_Javascript_Date - Fatal编程技术网

Javascript setMonth显示不正确的日期

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日

如果我的日期是2014年5月31日,那么如果我说date.setMonth(date.getMonth()+1)进入下一个月,我会得到2014年7月1日。我预计将于2014年6月30日到达。我猜这是因为六月没有31天,所以JavaScript尽可能避免错误

我编写了一个特殊的函数,根据计算结果在该日期对象上实际执行setDate、setMonth和setYear函数。似乎光是设定月并不能做正确的事情

想法


大卫

你想从现在开始一个月吗?如果是这样,你得到的是正确的。从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日期。