第二天使用setDate不起作用

时间:2015-12-14 10:32:38

标签: 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(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);
});

2 个答案:

答案 0 :(得分:1)

你的问题在于日期是一个字符串,并且通过添加一个附加到字符串的字符串 - 将1转换为字符串而不是将14转换为整数。但是,从字符串中减去字符串会将字符串强制转换为数字。这是JavaScript的一个怪癖,来自重用运算符。由于加号也用于组合字符串,因此它对混合类型操作数的行为有点令人困惑。

小cheatsheet(假设字符串可以被强制转换为数字):

string + string = string
string + number = string
number + string = string
string - number = number
number - string = number
string - string = number
+string + number = number (read below)

您可以使用get_selected_date.split('-')[2]将从parseInt(str)获取的字符串解析为int,也可以使用常用的解决方法在字符串前加上加号。这会将字符串强制转换为数字。所以你的代码只需要这个改变:

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

对于优化,您可能还想写

selectedDate.setDate(nextDay);

并使用selectedDate而不是

date = new Date(selectedDate.setDate(nextDay));

setDate()会返回,但它也可以就地工作,因此它会更改您使用它的日期。

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

答案 1 :(得分:0)

    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 = new Date(str [0],str [1] -1,(parseInt(str [2]) - 1));

str将返回'2015-12-13'