33

是否有一种简单/内置的方法来计算当前的财务季度?

前任:

  • 1-3月:1日
  • 4-7月:2日
  • 7-9月:3日
  • 10 月至 12 月:4 日
4

9 回答 9

62

现在立即支持此功能:

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

文档

于 2014-05-01T18:57:50.933 回答
19

使用 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};
}
于 2016-11-03T22:19:41.773 回答
6

使用这个简单的代码来获得基于 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');

小提琴

于 2014-01-08T07:13:56.843 回答
5

开始日期

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

将返回当前季度,并将日期设置为季度开始日期。

moment("2019", "YYYY").quarter(4).startOf('quarter');

将返回“2019”年第四季度的开始日期。

moment().startOf('quarter');

将返回当年当前季度的开始日期。

结束日期

moment().quarter(moment().quarter()).endOf('quarter');

将返回当前季度,并将日期设置为季度结束日期。

moment("2019", "YYYY").quarter(4).endOf('quarter');

将返回“2019”年第四季度的结束日期。

moment().endOf('quarter');

将返回当年当前季度的结束日期。

于 2020-07-21T07:59:15.970 回答
4

我认为这些答案中的任何一个都不能解释如何获得财务季度。他们解释了如何获得日历季度。

我没有一个明确的答案,因为这就是导致我来到这里的原因。但财政季度才是真正想要的。这是基于财政年度的开始月份。

例如,如果我公司的财政开始月份是 2 月。然后在 2017 年 1 月 9 日撰写本文时,我实际上是在 2016 年第四季度。

为了实现这一点,我们需要一种方法来获取相对于提供的起始月份整数的季度。

于 2017-01-09T20:21:32.300 回答
1

目前没有内置任何内容,但可以为季度添加格式化标记。https://github.com/timrwood/moment/pull/540

同时,您可以使用以下内容。

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

或者,如果您希望它出现在原型上,请执行此操作。

moment.fn.quarter = function () {
    return Math.floor(this.month() / 3) + 1;
}
于 2012-12-26T22:03:42.513 回答
1

似乎对我有用的公式是:

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

moment().month() 返回 0-11 月份格式,所以我们必须添加一个

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;

于 2012-12-26T22:18:11.910 回答
0

最简单的方法是

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

这将为您提供基于零的季度指数。即 0、1、2 或 3。

然后,如果您想要季度的字面数字,只需添加一个。

于 2013-07-07T21:56:20.527 回答
0

Nishchit Dhanani给出的答案是正确的,但在“四月”场景中有一个问题。

问题:如果您的财政年度是 4 月,那么前 3 个月,即 1 月、2 月和 3 月

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);
于 2019-01-31T18:50:09.010 回答