尝试让用户点击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);
});
答案 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'