从当月开始打印3个月的日历

时间:2013-09-19 11:02:17

标签: javascript

我在javascript中获取当前日期,然后将其转换为当前月份。根据当前月份(现在9个月),我想向后打印过去3年的月历。因此,如果我们有2013年9月,则必须打印以下内容:

08 09 10 11 12 2010
01 02 03 04 05 06 07 08 09 10 11 12 2011

01 02 03 04 05 06 07 08 09 10 11 12 2012

01 02 03 04 05 06 07 08 2013

我有一个大致的想法如何打印第一行,但我正在努力如何打印日历的其余部分。这是第一行(2013)的代码:

function printCalendarRows(){
        var d = new Date();
        var n = (d.getMonth()) + 1;
        var twelve = 12;
        for(var i = n; i <= 12; i++){
            for(var j = 12; j >= n; j--){
                console.log(i);
                console.log(j);
            }
        }
}    

有什么建议吗?感谢

3 个答案:

答案 0 :(得分:1)

function calRows() {
    var date,
        now = new Date(),
        str = "";

    for (var i = -37;i++;) {       
        date = new Date(now.getFullYear(), now.getMonth() + i - 1, 1)
        month = ("0" + (date.getMonth() + 1)).slice(-2);
        str += month + " " + (+month % 12 == 0 ? date.getFullYear() + "\n" : "")
    }

    return str + date.getFullYear();
}
console.log (calRows()) /*
08 09 10 11 12 2010
01 02 03 04 05 06 07 08 09 10 11 12 2011
01 02 03 04 05 06 07 08 09 10 11 12 2012
01 02 03 04 05 06 07 08 2013 */

继承人Fiddle

或者如果您愿意,同样不在循环中指定新的Date对象。

function calRows() {
    var date,
        now = new Date(),
        first = new Date(now.getFullYear(), now.getMonth() -37, 1),
        monthYear = [first.getMonth(),first.getFullYear()]
        str = "";

    for (var i = -37;i++;) {
        month = ("0" + (++monthYear[0])).slice(-2);
        str += month + " " + (+month % 12 == 0 ? (monthYear[0]=0,monthYear[1]++) + "\n" : "")
    }

    return str + monthYear[1]
}

答案 1 :(得分:0)

检查这是否是你想要的

function printCalendarRows(){
        var d = new Date();
        var o = new Date();
        o.setMonth( (d.getMonth()) - 36); //or   o.setFullYear( (d.getFullYear()) - 3);
        var currnt;
        while (o < d)
        {
          currnt = o.getMonth();
          console.log(currnt);
          if (currnt == 11)
          {
             console.log(o.getFullYear());
          }
          o.setMonth(currnt+1);

        }
        if (d.getMonth() != 11)
        {
           console.log(d.getFullYear());
        }
        alert("Date:"+ d + "Month:" + d.getMonth());
}

答案 2 :(得分:0)

我会使用momentjs

function printCalendarRows(){
    var d = moment().subtract('months', 37);
    var y = d.format("YYYY");
    var n = moment().format("MM/YYYY");
    var log = "";
    while(d.format("MM/YYYY") != n) {
        if (d.format("YYYY") != y) {
            console.log(log + y + "\r\n");
            y = d.format("YYYY");
            log = "";
        }
        log += d.format("MM") + " ";
        d = d.add("months", 1);
    }
    console.log(log + d.format("YYYY"));
}

printCalendarRows();

working DEMO