问题描述
我正在Angular JS中使用一个函数来生成从今天的日期开始的过去一周的日期。 我将这些日期存储在数组中,然后使用该数组填充下拉列表。 以下是我正在使用的代码。
generate() {
this.date_new = [];
var date = new Date();
var date1 = new Date();
for (var i = 0; i < 7; i++) {
date.setDate(date1.getDate() - i);
var a = date.toString();
var str = this.convert(a);
this.date_new.push(str);
}
}
这里的convert是一个用于将日期转换为所需格式的函数。 下面是生成日期的屏幕截图。
从屏幕截图可以明显看出,最后两个日期不正确。 有人可以向我解释,这是什么问题?
1楼
setDate()方法设置Date对象相对于当前设置的月初的日期。
以上来自 。
您的代码适用于前5个日期,但是一旦您使用-1
修改了2月的日期,它将设置相对于当前月份的日期,例如2月。
因此,这将变成一月份(因为您将日期设置为-1),下一次迭代中也会发生同样的情况,因此您将获得十二月。
为了轻松解决,您可以在for
循环的第一行中将date
变量设置为new Date()
。
2楼
这里的问题是在循环中使用相同的date
变量。
您需要重新初始化它。
在 参数值”部分可以看到。
setDate()
零值和负值设置上个月的日期。
因此,在setDate(0)
,日期值设置为2月的最后一天。由于您使用的是相同的变量,因此setDate(-1)
从2月开始使用上一个月,因此得到1月。
您需要将代码更改为以下内容:
generate() {
this.date_new = [];
var date1 = new Date();
for (var i = 0; i < 7; i++) {
// re-initialize date
var date = new Date();
date.setDate(date1.getDate() - i);
var a = date.toString();
var str = this.convert(a);
this.date_new.push(str);
}
}
希望这可以帮助 :)
3楼
这里的问题是setDate方法内的负数不能很好地工作。
请将代码更新为如下所示:
this.date_new = [];
var date = new Date();
var date1 = new Date();
for (var i = 0; i < 7; i++) {
date= new Date(date1.getFullYear(), date1.getMonth(),date1.getDate()-i);
var a = date.toString();
var str = this.convert(a);
this.date_new.push(str);
}
希望这能解决您的问题。