如何使用 JavaScript 获取当前季度?我正在尝试检测我们目前处于哪个季度,例如2季度。
编辑 而如何计算本季度剩余的天数?
如何使用 JavaScript 获取当前季度?我正在尝试检测我们目前处于哪个季度,例如2季度。
编辑 而如何计算本季度剩余的天数?
假设1月到3月被认为是第一季度(有些国家/公司将财政年度与日历年度分开),以下代码应该可以工作:
var today = new Date();
var quarter = Math.floor((today.getMonth() + 3) / 3);
这给你:
Month getMonth() quarter
--------- ---------- -------
January 0 1
February 1 1
March 2 1
April 3 2
May 4 2
June 5 2
July 6 3
August 7 3
September 8 3
October 9 4
November 10 4
December 11 4
如何获取本季度剩余天数,基本上需要计算下一季度的第一天,并计算两者之间的差值,类似于:
var today = new Date();
var quarter = Math.floor((today.getMonth() + 3) / 3);
var nextq;
if (quarter == 4) {
nextq = new Date (today.getFullYear() + 1, 1, 1);
} else {
nextq = new Date (today.getFullYear(), quarter * 3, 1);
}
var millis1 = today.getTime();
var millis2 = nextq.getTime();
var daydiff = (millis2 - millis1) / 1000 / 60 / 60 / 24;
这还没有经过测试,但理论基础是可靠的。基本上创建一个对应于下个季度的日期,将它和今天转换为自纪元开始以来的毫秒数,然后用它们的差值得到毫秒数。
将其除以一天的毫秒数即可得到相差的天数。
这至少给出了剩余季度天数的大致数量。您可能需要微调它,以确保所有时间都设置为相同的值(00:00:00),以便计算出确切的天数差。
根据“季度中剩余天数”的实际定义,它也可能存在偏差。
但这应该是一个很好的起点。
鉴于您没有提供任何确定“我们当前处于哪个季度”标准的标准,可以建议一种算法,然后根据您需要的标准进行适应。例如:
// For the US Government fiscal year
// Oct-Dec = 1
// Jan-Mar = 2
// Apr-Jun = 3
// Jul-Sep = 4
function getQuarter(d) {
d = d || new Date();
var m = Math.floor(d.getMonth()/3) + 2;
return m > 4? m - 4 : m;
}
作为可运行的代码片段并包含年份:
function getQuarter(d) {
d = d || new Date();
var m = Math.floor(d.getMonth() / 3) + 2;
m -= m > 4 ? 4 : 0;
var y = d.getFullYear() + (m == 1? 1 : 0);
return [y,m];
}
console.log(`The current US fiscal quarter is ${getQuarter().join('Q')}`);
console.log(`1 July 2018 is ${getQuarter(new Date(2018,6,1)).join('Q')}`);
您可以根据需要适应不同的财务或日历季度。您还可以执行以下操作:
function getQuarter(d) {
d = d || new Date(); // If no date supplied, use today
var q = [4,1,2,3];
return q[Math.floor(d.getMonth() / 3)];
}
根据所需季度的定义,使用不同的q
数组。
以下代码获取如果季度从1月、4月、7月和10月开始的话,季度中剩余的天数。它已在各种浏览器中进行了测试,包括IE 6(尽管它使用基本的ECMAScript应该可以在任何地方工作):
function daysLeftInQuarter(d) {
d = d || new Date();
var qEnd = new Date(d);
qEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);
return Math.floor((qEnd - d) / 8.64e7);
}
[y,m]
。;-) 实际表达式的格式由用户决定,如果需要可排序性,则年/季度适合。我更喜欢2019Q1,这相当于ISO标准,所以美国似乎更喜欢其他东西,比如Q1'19或Q1/19或类似的不会按字典顺序排序的东西。 :-( - RobGreturn Math.ceil((d.getMonth() + 1) / 3)
- Disorderfunction getQuarter(d) {
return Math.floor(d.getMonth()/3) + 1);
}
编辑:我错过了%4,完全正确,谢谢Clement
var today = new Date();
var month = now.getMonth();
var quarter;
if (month < 4)
quarter = 1;
else if (month < 7)
quarter = 2;
else if (month < 10)
quarter = 3;
else if (month < 13)
quarter = 4;
moment().quarter()
moment().quarter(moment().quarter()).startOf('quarter');
moment("2019", "YYYY").quarter(4).startOf('quarter');
将返回"2019"年第4季度的开始日期。
moment().startOf('quarter');
moment().quarter(moment().quarter()).endOf('quarter');
moment("2019", "YYYY").quarter(4).endOf('quarter');
返回2019年第四季度的结束日期。
moment().endOf('quarter');
根据月份变化
var date = new Date();
var quarter = parseInt(date.getMonth() / 3 ) + 1 ;
依赖日期
var date = new Date();
var firstday = new Date(date.getFullYear(),0,1); // XXXX/01/01
var diff = Math.ceil((date - firstday) / 86400000);
// a quarter is about 365/4
quarter = parseInt( diff / ( 365/ 4 )) + 1
// if today is 2012/01/01, the value of quarter is 1.
var d = new Date();
var quarter = Math.ceil(d.getMonth() / 3);
console.log(quarter)
我不知道为什么大家都使用floor,当你可以简单地使用ceil
。
function getQuarter(m) {
return Math.ceil(m / 3)
}
// Test it
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12].map(getQuarter);
function getQuarter(date) {
const m = date.getMonth() + 1;
return Math.ceil(m / 3)
}
通用、快速的性能(无除法,无浮点数),易于修改为其他标准
const now = new Date()
const currentMonth = now.getMonth() + 1
const currentQuarter = {
1: 1, // January
2: 1, // February
3: 1, // March
4: 2, // April
5: 2, // May
6: 2, // June
7: 3, // July
8: 3, // August
9: 3, // September
10: 4, // October
11: 4, // November
12: 4, // December
}[currentMonth]
console.log(currentQuarter)
对于关心财政季度的任何人,这里有一种简单的方法,只需要0(1)的时间。首先,由于这是基于月份的固定数据,为什么不创建一个关联数组呢?请记住,JavaScript的月份从0开始,到11结束。
** getMonth(): Fiscal quarter
const FISCAL_QUARTER = {
0:2,1:2,2:2,3:3,4:3,5:3,6:4,7:4,8:4,9:1,10:1,11:1
};
function getFiscalQuarter(d){
return FISCAL_QUARTER[d.getMonth()];
}
console.log(getFiscalQuarter(new Date()));