以前的季度在JavaScript中

时间:2014-03-25 18:28:06

标签: javascript datetime

请原谅我,我在这里和其他地方尝试了几次搜索,但似乎无法解决我目前遇到的问题。有人可以帮我解决一下吗?

我试图在JavaScript中找到inputdate的四分之一字符串。对于“01/31/2009”,它应根据作为输入参数给出的偏移量给出Q1,2013 Q4,2012等。当偏移量为0时,则为当前季度,1为先前,2为先前的2季度等...

我目前的代码:jsfiddle

function getQuarterStrings(id) {
    var d = new Date();
    var d = new Date("01/31/2009");
    var str;
    switch (id) {
...
}

剩下的代码在jsfiddle中。正如你所看到的,即使一切似乎都没问题,它也会在倒数第二个条件下失败。请帮我弄清楚我的错误。谢谢!

3 个答案:

答案 0 :(得分:2)

您的某些比较已经结束,而Date会尝试弥补您setMonth没有多少天的月份。这段代码应该有效:

function getQuarterStrings(id) {
    var d = new Date("03/31/2009");
    d.setDate(1);
    d.setMonth(d.getMonth() - id * 3);
    var month = d.getMonth() + 1;
    var year = d.getFullYear();
    var quarter = Math.ceil(month / 3);
    return ("Q" + quarter + ", " + year);
}

答案 1 :(得分:1)

这很有效,而且更简洁。它还允许您使用任何偏移量而不是有限的一组值:

function getQuarterStrings(date, id) {
    // quarter is 0-based here
    var quarter = Math.floor(date.getMonth() / 3),
        year = date.getFullYear();
    quarter -= id;

    if(quarter < 0) {
        var yearsChanged = Math.ceil(-quarter / 4);
        year -= yearsChanged;
        // Shift quarter back to a nonnegative number
        quarter += 4 * yearsChanged;
    }

    return "Q" + (quarter + 1) + ", " + year;
}

http://jsfiddle.net/dPmf2/6/

答案 2 :(得分:0)

你也可以通过这样做摆脱switch语句:

function getQuarterStrings(id) {
    var d = new Date();
    var d = new Date("01/31/2009");
    var str;
    if (id !== 0){
        d.setMonth(d.getMonth() - 3*id);
    }
    str = getQuarter(d);
    return str;
}