代码之家  ›  专栏  ›  技术社区  ›  j-p

javascript日期,过去12个月

  •  0
  • j-p  · 技术社区  · 6 年前

    我想得到过去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 回复  |  直到 6 年前
        1
  •  1
  •   デビット    6 年前

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

    更新:您需要在循环中移动当前日期声明,因为z 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 ));
    }
        2
  •  2
  •   blaz    6 年前

    变化

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

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

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

        3
  •  1
  •   user229044    6 年前

    setMonth 修改日期,它不会返回修改过的副本。所以,你第一次打电话 设定月份 ,你要把日期往后移12个月。下次你要把它移回11个月,总共23个月。然后你把它移回10个月,总共33个月。

    而不是一直把日期往后移 12 - i ,每次移回1个月:

    now.setMonth(now.getMonth() - 1);
    
        4
  •  1
  •   Code Maniac    6 年前

    改变这个

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