Javascript显示/计算过去3个月

时间:2011-10-27 11:06:52

标签: javascript date

我有一个在过去3个月内运行的函数,并使用数组显示名称。

我刚刚意识到,新的一年到来,一月,二月和三月,它将无法获得正确的月份。

我希望能够在不添加黑客的情况下执行此操作(这是我见过的唯一方法)

function getMonths()
    {
        var today = new Date();             
        var month = 0;
        var currMonth = month-3;

        var monthArray = new Array("January","February","March","April","May","June",
                "July","August","September","October","November","December");

        var menuMonths = new Array();
        var count = 4;
        var buffer = 10;

        while(count >0)
        {           
            var month = monthArray[currMonth];
            alert(currMonth);
            menuMonths.push(month);

            currMonth = currMonth +1;
            count = count -1;
        }       
        return menuMonths;
    }   

5 个答案:

答案 0 :(得分:1)

模数是你的朋友。尝试:

function getMonths()
{
    var today = new Date();             
    var month = 1;

    var monthArray = new Array("January","February","March","April","May","June",
            "July","August","September","October","November","December");

    var menuMonths = new Array();

    for(var count = 3; count >= 0; count--)
        menuMonths.push(monthArray[((12 + month - count) % 12)]);

    return menuMonths;
}

alert(getMonths());

答案 1 :(得分:0)

对while循环的这一点添加将确保currMonth始终是monthArray的有效索引:

 while(count >0)
    {           
        if (currMonth < 0)
            currMonth += 12;
        if (currMonth >=12 )
            currMonth -= 12;

        var month = monthArray[currMonth];
        menuMonths.push(month);

        currMonth = currMonth +1;
        count = count -1;
    }       

工作示例:http://jsfiddle.net/RWhN4/
这有点hackish,但它应该做你想要的。

答案 2 :(得分:0)

要确定3个月前的哪个月,您可以执行以下操作:

var d = new Date();
d.setMonth(d.getMonth() - 3);
var monthIndex = d.getMonth() //(0-11)

让标准的javascript方法为你做计算。

这是您更新的函数,使用javascript方法为您进行计算:

function getMonths() {
    var date = new Date();

    //subttract 3 months
    date.setMonth(0 - 3);

    var monthArray = new Array("January", "February", "March", "April", "May", "June",
            "July", "August", "September", "October", "November", "December");

    var menuMonths = new Array();
    var count = 4;
    var buffer = 10;

    while (count > 0) {
        var month = monthArray[date.getMonth()];

        alert(month);

        menuMonths.push(month);

        date.setMonth(date.getMonth() + 1);

        count -= 1;
    }
    return menuMonths;
}

答案 3 :(得分:0)

function lastMonths(count,month,order) {
    var arr = [];
    //defaults
    month = typeof month !== 'undefined' ? month : new Date().getMonth();
    count = typeof count !== 'undefined' ? count : 3;
    order = typeof order !== 'undefined' ? order : "asc";

    while (count-- > 0) {
        month = (--month < 0) ? 11 : month;
        arr.push(["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"][month]);
    }
    return ( order === "asc" ) ? arr.reverse() : arr;
}

该函数具有显示的月数,开始月份和订单的默认值 demo

答案 4 :(得分:0)

我做了类似于你们所做的事情,但我基本上是为Trailing Twelve Months做的,在它的表单格式中我使用了以下代码:

$(".monthly_usage").val('');
    var monthArray = new Array("January","February","March","April","May","June","July","August","September","October","November","December");
    var today = new Date();

    var month = today.getMonth();
    var year = today.getFullYear();
    var output = "Enter Trailing Twelve Months Usage<br/><center><table border=1 cellpadding=10 cellspacing=0><thead><th>Month - Year</th><th>Usage</th></thead><tbody>";
    for(var i = 0; i < 12; i++) {
        output += "<tr><td>" + monthArray[today.getMonth()] + " " + year + "</td><td><input type=text class=monthly_usage name=usage[]></td></tr>";
        var month = today.setMonth(today.getMonth() - 1);
        var year = today.getFullYear(); 
    }
    output += "</tbody></table>"+
    "<button id=submit_ttm>Submit Monthly Usage</button></center>";
    return output;