Javascript дисплей / рассчитать последние 3 месяца - PullRequest
0 голосов
/ 27 октября 2011

У меня есть функция, которая работает последние 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 ]

1 голос
/ 27 октября 2011

Модуль твой друг. Попробуйте:

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());
0 голосов
/ 23 августа 2012

Я сделал что-то похожее на то, что вы, ребята, делали, но я делал это для Трейлинга двенадцати месяцев , в основном, в его формате я использовал следующий код:

$(".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;
0 голосов
/ 27 октября 2011
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

0 голосов
/ 27 октября 2011

Чтобы выяснить, какой месяц был 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;
}
0 голосов
/ 27 октября 2011

Это небольшое дополнение к вашему циклу 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/
Это немногохак, но он должен делать то, что вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...