2016-08-24 88 views
1

有沒有辦法讓當前季度和上一年同沿三個季度,例如,它應該返回四個季度這樣Moment.js你如何獲得當前季度和前三個季度?

q3-2016 q2-2016 q1-2016 q4-2015

+0

什麼是你的 「季」 的定義是什麼?不同的行政分類有不同的定義(例如,日曆與財政年度以及不同司法管轄區的財政年度)。 – RobG

回答

5

下面是使用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') 
) 
1

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);

+1

考慮將代碼張貼爲可運行片段。 – RobG

+0

謝謝@RobG。我學到了一些新東西。我根據您的建議編輯了代碼。 –

0

假設你想日曆季度(即Q1是1至3月包容,Q2 4至6月包容性等),然後像傑里米的作品的方法。以下內容相似,只是使用一些數組方法更具創意。

如果您對「季度」有其他定義(例如,包括七月至九月在內的財務往往是Q1,而Apr-Jun是上一年的第四季度),則相應地設置初始值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())

相關問題