setMonth()在第31天的情况下设置错误的日期

时间:2016-06-03 11:40:26

标签: javascript date datetime

我面临着JS的setMonth函数非常奇怪的行为。  点击图片后,我显示的是日历,包含当月的所有日期以及下个月和上个月的日期(灰色)。

每当选择的当前日期是任何月份的第31个日期。假设2017年5月31日我选择我将在文本字段中设置。如果我点击2017年6月2日,而不是将文本字段设置为2017年6月2日,则设置为2017年7月2日?

请说明错误是什么。

代码段使用如下

var tempDate = new Date(current); //Suppose : current --> Wed May 31 16:09:00 UTC+0530 2017 
var dayOfMonth = parseInt(element.text(), 10); //Suppose : element.text() --> 2   
tempDate.setMonth(tempDate.getMonth() + (dayOfMonth > 15 ? -1 : 1)); //tempDate.getMonth() + (dayOfMonth > 15 ? -1 : 1) returns 10
tempDate.setDate(dayOfMonth);

//Output Expected : 02 June 2017 but it gives 02 July 2017

2 个答案:

答案 0 :(得分:2)

在javascript日期对象中,Month从0开始,所以如果你想生成任何月份,那么就这样做。请参阅此网址以获取日期:MDN Date

作为你的代码,我认为你错了     dayOfMonth> 15? 1:-1



var dayOfMonth  = 13;
alert((dayOfMonth > 15 ? 1 : -1))
var tempDate = new Date(); 
tempDate.setMonth(tempDate.getMonth() + (dayOfMonth > 15 ? 1 : -1)); 
tempDate.setDate(dayOfMonth);
alert(tempDate)




答案 1 :(得分:0)

我认为这是针对当月没有一天(31)的操作采取具有该天的下个月的操作的标准行为

>var date = new Date('2018/10/31');
undefined
>date
Wed Oct 31 2018 00:00:00 GMT-0600 (hora estándar central)
>date.setMonth(date.getMonth() + 1);
1543644000000
>date
Sat Dec 01 2018 00:00:00 GMT-0600 (hora estándar central)