前几个季度的javascript



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

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

我的当前代码:jsfiddle

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

剩余代码在jsfile中。正如你所看到的,它在倒数第二个条件下失败了,尽管一切看起来都很好。请帮我找出我的错误。谢谢你!

你的一些比较是关闭的,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);
}

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

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/

您还可以通过以下方式摆脱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;
}

相关内容

  • 没有找到相关文章

最新更新