当前位置: 代码迷 >> JavaScript >> 为什么日期不能正确生成?
  详细解决方案

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

热度:17   发布时间:2023-06-07 13:46:39.0

我正在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是一个用于将日期转换为所需格式的函数。 下面是生成日期的屏幕截图。

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

setDate()方法设置Date对象相对于当前设置的月初的日期。

以上来自 。

您的代码适用于前5个日期,但是一旦您使用-1修改了2月的日期,它将设置相对于当前月份的日期,例如2月。 因此,这将变成一月份(因为您将日期设置为-1),下一次迭代中也会发生同样的情况,因此您将获得十二月。

为了轻松解决,您可以在for循环的第一行中将date变量设置为new Date()

这里的问题是在循环中使用相同的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);
    }
}

希望这可以帮助 :)

这里的问题是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);
}

希望这能解决您的问题。

  相关解决方案