为什么日期不能正确生成?

时间:2019-03-04 05:55:26

标签: javascript arrays angular date

我正在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);
    }
}

此处转换是一项用于将日期转换为所需格式的功能。下面是生成日期的屏幕截图。

The generated dates

从屏幕截图可以明显看出,最后两个日期不正确。有人可以向我解释,这是什么问题?

3 个答案:

答案 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);
}

希望这可以解决您的问题。