是否有一种简单/内置的方法来计算当前的财务季度?
前任:
- 1-3月:1日
- 4-7月:2日
- 7-9月:3日
- 10 月至 12 月:4 日
现在立即支持此功能:
moment('2014-12-01').utc().quarter() //outputs 4
moment().quarter(); //outputs current quarter ie. 2
使用 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};
}
使用这个简单的代码来获得基于 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');
开始日期
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');
将返回当年当前季度的结束日期。
我认为这些答案中的任何一个都不能解释如何获得财务季度。他们解释了如何获得日历季度。
我没有一个明确的答案,因为这就是导致我来到这里的原因。但财政季度才是真正想要的。这是基于财政年度的开始月份。
例如,如果我公司的财政开始月份是 2 月。然后在 2017 年 1 月 9 日撰写本文时,我实际上是在 2016 年第四季度。
为了实现这一点,我们需要一种方法来获取相对于提供的起始月份整数的季度。
目前没有内置任何内容,但可以为季度添加格式化标记。https://github.com/timrwood/moment/pull/540
同时,您可以使用以下内容。
Math.floor(moment().month() / 3) + 1;
或者,如果您希望它出现在原型上,请执行此操作。
moment.fn.quarter = function () {
return Math.floor(this.month() / 3) + 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;
最简单的方法是
Math.floor(moment.month() / 3)
这将为您提供基于零的季度指数。即 0、1、2 或 3。
然后,如果您想要季度的字面数字,只需添加一个。
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);