Javascript 第二天不';使用setDate无法工作

Javascript 第二天不';使用setDate无法工作,javascript,jquery,date,Javascript,Jquery,Date,尝试让用户单击next和prev按钮,使用JS调整日期 当我加上一天的时间,并试图得到明天的日期时,这是行不通的 $('#next_date').click(function(e) { var get_selected_date = "2015-12-14", nextDay = get_selected_date.split('-')[2] + 1, selectedDate = new Date(get_selected_date), date = new Date(sele

尝试让用户单击next和prev按钮,使用JS调整日期

当我加上一天的时间,并试图得到明天的日期时,这是行不通的

$('#next_date').click(function(e) {
  var get_selected_date = "2015-12-14",
  nextDay = get_selected_date.split('-')[2] + 1,
  selectedDate = new Date(get_selected_date),
  date = new Date(selectedDate.setDate(nextDay));
  console.log(date);
});
但是我用同样的逻辑得到了前一个日期,只差一天,如下图所示

$('#prev_date').click(function(e) {
  var get_selected_date = "2015-12-14",
  nextDay = get_selected_date.split('-')[2] + 1,
  selectedDate = new Date(get_selected_date),
  date = new Date(selectedDate.setDate(nextDay));
  console.log(date);
});

您的问题在于日期是一个字符串,通过添加一个附加到字符串中的日期,1变成字符串,而不是14变成整数。但是,从字符串中减去会将字符串强制为数字。这是JavaScript的一个怪癖,源于重用操作符。由于加号还用于组合字符串,因此它与混合类型操作数的行为有些混乱

小备忘单(假设字符串可以强制为数字):

您可以使用
parseInt(str)
将从
get\u selected\u date.split('-')[2]
获取的字符串解析为整数,或者使用常用的解决方法在字符串前面加上加号。这会将字符串强制转换为数字。因此,您的代码只需要进行以下更改:

nextDay = +get_selected_date.split('-')[2] + 1

对于优化,您可能还需要编写

selectedDate.setDate(nextDay);
并使用所选日期而不是您的

date = new Date(selectedDate.setDate(nextDay));
setDate()返回,但它也在适当的位置工作,因此它会更改您使用它的日期

旁注:请对所有变量使用var。否则它们是全局性的,会弄乱您的其他代码

    var str = '2015-12-14';
    str = str.split(/\D+/);
    str = new Date(str[0], str[1] - 1, (parseInt(str[2]) + 1)); 
str将返回“2015-12-15”

//str[2]是日期,str[2])+1是加一天

对于上一个日期, str=新日期(str[0],str[1]-1,(parseInt(str[2])-1))


str将返回“2015-12-13”

为什么前一天不会出现这种情况?@Jennifer:因为
-
操作符没有双重含义,就像
+
(它是数学加法操作符和字符串串联操作符)一样。Thx@CBroe刚刚添加了关于这个主题的更多细节。
    var str = '2015-12-14';
    str = str.split(/\D+/);
    str = new Date(str[0], str[1] - 1, (parseInt(str[2]) + 1));