【问题标题】:Moment.js how do you get the current Quarter and previous three quarters along with year?Moment.js 你如何获得当前季度和前三个季度以及年份?
【发布时间】:2016-12-31 00:30:37
【问题描述】:

有没有办法获得当前季度和前三个季度以及年份,例如它应该像这样返回四个季度

2016 年第三季度 2016年第二季度 2016年第一季度 2015 年第四季度

【问题讨论】:

  • 你对“季度”的定义是什么?不同的行政分类有不同的定义(例如日历与财政年度,以及不同司法管辖区的财政年度)。

标签: javascript angularjs date datetime momentjs


【解决方案1】:

这是使用 Moment.js 的解决方案:

const moment = require('moment');

let fmt      = '[q]Q-Y';
let quarters = [
  moment().format(fmt),
  moment().subtract(1, 'Q').format(fmt),
  moment().subtract(2, 'Q').format(fmt),
  moment().subtract(3, 'Q').format(fmt)
];
// quarters = [ 'q3-2016', 'q2-2016', 'q1-2016', 'q4-2015' ]

或者更简洁的版本:

let quarters = [ 0, 1, 2, 3 ].map(i => 
  moment().subtract(i, 'Q').format('[q]Q-Y')
)

【讨论】:

  • 按照最新的 momen.js 格式,如果您遵循上述自定义格式,则需要将其从 '[q]Q-Y' 更改为 '[q]Q-YYYY' 。
【解决方案2】:

var d = new Date();//current date
    var y = d.getFullYear();//year as 4 digit number
    var m = d.getMonth();//0 to 11 which actually is helpful here
    var q = Math.floor(m / 3) + 1;//month div 3 + 1
    var s = "";//this holds the result
    for (var i = 0; i < 4; i++) {
        s += "q" + q + "-" + y;
        if (i < 3) {
            s += " ";//another entry coming so put in space
            q--;//and roll back quarter
        }
        if (q == 0) {
            q = 4;//we were in q1 so predecessor is q4
            y--;//and the year is one less
        }
    };
console.log(s);

【讨论】:

  • 谢谢@RobG。我学到了一些新东西。我根据您的建议编辑了代码。
【解决方案3】:

假设您想要日历季度(即第一季度是一月到三月,第二季度四月到六月,等等)然后像杰里米的作品这样的方法。下面是类似的,只是在一些数组方法上更有创意。

如果您对“季度”有其他定义(例如,包括 7-9 月通常是财务上的 Q1,而 Apr-6 月是上一年的 Q4),那么设置 q的初始值> 相应地。

function getQuarters() {
  var d = new Date().toISOString().split('-').splice(0,2);
  var q = Math.ceil(d[1] / 3);
  return new Array(4).fill(null).reduce(function(acc, v,i, arr) {
    arr[i] = 'q' + q + '-' + d[0];
    d[0] -= q==1? 1 : 0;
    q    -= q > 1? 1 : -3;
    return arr;
  }, null);
}

console.log(getQuarters())

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-12
    • 1970-01-01
    • 1970-01-01
    • 2020-09-02
    • 2012-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多