JavaScript日期,过去12个月

时间:2019-02-20 04:52:43

标签: javascript date

我想获取过去12个月的连续12个月图表。

这就是我正在做的

function formatDate(date) {

    date = new Date(date);
    var day = date.getDate();
    var monthIndex = date.getMonth();
    var year = date.getFullYear();

    return day + ' ' + monthIndex + ' ' + year;
}

let now = new Date();

for ( let i=12; i>0; i--) {
    let newdate = now.setMonth(now.getMonth() - i);
    console.log(formatDate(newdate ));
}

这就是我所得到的:(完全不是我所期望的。)

19 1 2018
19 2 2017
19 4 2016
19 7 2015
19 11 2014
19 4 2014
19 10 2013
19 5 2013
19 1 2013
19 10 2012
19 8 2012
19 7 2012

我想要的

19 2 2018
19 3 2018
19 4 2018
19 5 2018
19 6 2018
19 7 2018
19 8 2018
19 9 2018
19 10 2018
19 11 2018
19 0 2019
19 1 2019

4 个答案:

答案 0 :(得分:2)

更改

let newdate = now.setMonth(now.getMonth() - i);

let newdate = now.setMonth(now.getMonth() - 1);

很容易在您的原始代码中看到月份值减少了1,2,3,依此类推。在每次迭代中,您只需要减去1。

答案 1 :(得分:1)

setMonth修改日期,但不返回修改后的副本。因此,第一次致电setMonth时,您会将日期推迟了12个月。下次您将其移回11个月,总共需要23个月。然后将其移回10个月,总共33个月。

与其将日期不断地移回12 - i,而是一次将其移回1个月:

now.setMonth(now.getMonth() - 1);

答案 2 :(得分:1)

更改此

 now.getMonth() - i

对此

now.getMonth() - 1

function formatDate(date) {

    date = new Date(date);
    var day = date.getDate();
    var monthIndex = date.getMonth();
    var year = date.getFullYear();

    return day + ' ' + monthIndex + ' ' + year;
}

let now = new Date();

for ( let i=12; i>0; i--) {
    let newdate = now.setMonth(now.getMonth() - 1);
    console.log(formatDate(newdate ));
}

答案 3 :(得分:1)

您只想减去1个月,所以不要使用i,因为它是动态值。第一个循环不需要减法,如下所示

已更新:您需要在循环中移动当前日期声明,因为coz setMonth将更改您的日期值,因此每次循环时都需要调用当前日期...

function formatDate(date) {

    date = new Date(date);
    var day = date.getDate();
    var monthIndex = date.getMonth();
    var year = date.getFullYear();

    return day + ' ' + monthIndex + ' ' + year;
}

for ( let i=11; i>=0; i--) {
    let now = new Date();
    let newdate = now.setMonth(now.getMonth() - i);
    console.log(formatDate(newdate ));
}