我面临着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
答案 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)