我正在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);
}
}
此处转换是一项用于将日期转换为所需格式的功能。下面是生成日期的屏幕截图。
从屏幕截图可以明显看出,最后两个日期不正确。有人可以向我解释,这是什么问题?
答案 0 :(得分:1)
setDate()方法设置Date对象相对于日期的日期 当前设置的月初。
以上内容来自MDN。
您的代码适用于前5个日期,但是一旦您使用-1
修改了2月的日期,它就会设置相对于当前月份的日期,例如二月。因此,这将变成1月(将日期设置为-1),在下一次迭代中也会发生同样的情况,您将获得12月。
为简便起见,您只需在date
循环的第一行中将new Date()
变量设置为for
。
答案 1 :(得分:1)
这里的问题是在循环中使用相同的date
变量。您需要重新初始化它。
在link here的 Parameters Value 部分中可以看到。 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);
}
}
希望这会有所帮助:)
答案 2 :(得分:0)
这里的问题是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);
}
希望这可以解决您的问题。