Javascript 第二天不';使用setDate无法工作
尝试让用户单击next和prev按钮,使用JS调整日期 当我加上一天的时间,并试图得到明天的日期时,这是行不通的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_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));