web-dev-qa-db-ja.com

Moment.jsでは、現在の財務四半期をどのように取得しますか?

現在の財務四半期を把握するための単純な/構築された方法はありますか?

例:

  • 1月〜3月:1日
  • 4月〜7月:2日
  • 7月〜9月:3日
  • 10- 12月:4日
22
Toli

これは現在サポートされています:

moment('2014-12-01').utc().quarter() //outputs 4
moment().quarter(); //outputs current quarter ie. 2

ドキュメント

47
brian2013

バージョン2.14.1以降を使用すると、次のようなことができます。

moment().quarter()は、現在の四半期番号を返します:1、2、3、4。

moment().quarter(moment().quarter()).startOf('quarter');

日付を四半期の開始日に設定して、現在の四半期を返します。

moment().quarter(moment().quarter()).startOf('quarter');

日付を四半期終了日に設定して、現在の四半期を返します。

また、対応する四半期番号を引数(1,2,3,4)として受け取り、四半期の開始日と終了日を含むオブジェクトを返す関数を定義することもできます。

function getQuarterRange(quarter) {

  const start = moment().quarter(quarter).startOf('quarter');

  const end = moment().quarter(quarter).endOf('quarter');

  return {start, end};
}
15
Andres Zapata

この単純なコードを使用して、1月と4月に基づいてすべての四半期を取得します

デモ

コード:

 // startMonth should be january or april

  function setQuarter(startMonth) {
    var obj = {};
    if(startMonth=='january'){

        obj.quarter1 = {start:moment().month(0).startOf('month'),end:moment().month(2).endOf('month')}
        obj.quarter2 = {start:moment().month(3).startOf('month'),end:moment().month(5).endOf('month')}
        obj.quarter3 = {start:moment().month(6).startOf('month'),end:moment().month(8).endOf('month')}
        obj.quarter4 = {start:moment().month(9).startOf('month'),end:moment().month(11).endOf('month')}
        console.log(obj);
        return obj;
    }
    else if(startMonth=='april'){

        obj.quarter1 = {start:moment().month(3).startOf('month'),end:moment().month(5).endOf('month')}
        obj.quarter2 = {start:moment().month(6).startOf('month'),end:moment().month(8).endOf('month')}
        obj.quarter3 = {start:moment().month(9).startOf('month'),end:moment().month(11).endOf('month')}
        obj.quarter4 = {start:moment().month(0).startOf('month').add('years',1),end:moment().month(2).endOf('month').add('years',1)}
        console.log(obj);
        return obj;
    }
}

 setQuarter('april');

フィドル

5

これらの回答のいずれかが財務四半期を取得する方法を説明するとは思わない。彼らは暦四半期を取得する方法を説明します。

それが私をここに導いたものなので、私は明確な答えを持っていません。しかし、会計四半期は本当に求められているものです。そして、それは会計年度の開始月に基づいています。

たとえば、会社の会計開始月が2月であるとします。そして、この2017年1月9日の執筆時点で、私は実際には2016年第4四半期にいます。

これを行うには、開始月の指定された整数を基準にして四半期を取得する方法が必要です。

3
user2985295

現時点では何も組み込まれていませんが、四半期のフォーマットトークンを追加するための会話があります。 https://github.com/timrwood/moment/pull/54

それまでの間、次のようなものを使用できます。

Math.floor(moment().month() / 3) + 1;

または、プロトタイプにしたい場合は、これを実行します。

moment.fn.quarter = function () {
    return Math.floor(this.month() / 3) + 1;
}
1
timrwood

私にとってうまくいくように見える式は:

_Math.ceil((moment().month() + 1) / 3);
_

moment()。month()は0-11月の形式を返すため、1つ追加する必要があります

_THE ACTUAL MONTH = (moment().month() + 1)
_

四半期には3か月あるため、3で除算する必要があります。

_HOW MANY QUARTERS PASSED = (THE ACTUAL MONTH) / 3
_

次に、その上限を取得する必要があります(最も近い四半期末に丸めます)。

_CEILING(HOW MANY QUARTERS PASSED)
_

編集:

公式公式 (まだコミットされていません)は次のとおりです。

_~~((this.month()) / 3) + 1;
_

これはMath.floor((this.month()) / 3) + 1;を意味します

1
Toli

Nishchit Dhanani による回答は正しいですが、「4月」のシナリオで1つの問題があります。

問題:会計年度が4月の場合、最初の3か月間(JAN、FEB、MARなど)

obj.quarter1.start date returns, 1-April-CurrentYear [incorrect Value]
obj.quarter4.end date retunrs, 31-March-NextYear [incorrect Value]

正しい値は、

Start = 1-April-PreviuosYear
End = 31-March-CurrentYear

ですから、最初の3か月を考えると、次のように書くことができます。

    const obj = {};

/* 0-Jan, 1-Feb, 2-Mar */
    if (moment().month() <= 2) { 
        obj.quarter1 = { start: moment().month(3).startOf('month').add('years', -1), end: moment().month(5).endOf('month').add('years', -1) };
        obj.quarter2 = { start: moment().month(6).startOf('month').add('years', -1), end: moment().month(8).endOf('month').add('years', -1) };
        obj.quarter3 = { start: moment().month(9).startOf('month').add('years', -1), end: moment().month(11).endOf('month').add('years', -1) };
        obj.quarter4 = { start: moment().month(0).startOf('month'), end: moment().month(2).endOf('month') };    
    } else {
        obj.quarter1 = { start: moment().month(3).startOf('month'), end: moment().month(5).endOf('month') };
        obj.quarter2 = { start: moment().month(6).startOf('month'), end: moment().month(8).endOf('month') };
        obj.quarter3 = { start: moment().month(9).startOf('month'), end: moment().month(11).endOf('month') };
        obj.quarter4 = { start: moment().month(0).startOf('month').add('years', 1), end: moment().month(2).endOf('month').add('years', 1) };    
    }
    console.log(obj);
0
JiteshW

これを行う最も簡単な方法は

Math.floor(moment.month() / 3)

これにより、ゼロベースの四半期指数が得られます。つまり、0、1、2、または3です。

次に、四半期のリテラル数が必要な場合は、1を追加します。

0
thomallen