首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用javascript获取当前季度的数据

使用javascript获取当前季度的数据
EN

Stack Overflow用户
提问于 2012-08-16 13:58:34
回答 11查看 68.1K关注 0票数 39

如何使用javascript获取当前季度的数据?我正在尝试检测我们当前所处的季度,例如2。

编辑,如何计算该季度的剩余天数?

EN

回答 11

Stack Overflow用户

回答已采纳

发布于 2012-08-16 14:28:18

鉴于您没有提供任何标准来确定“*我们当前所在的季度”,可以建议一个算法,然后您必须适应您需要的任何标准。例如:

代码语言:javascript
复制
// 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;
}

作为一个可运行的代码片段,并包含年份:

代码语言:javascript
复制
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')}`);

然后,您可以根据不同的财务或日历季度进行适当的调整。您还可以执行以下操作:

代码语言:javascript
复制
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)];
}

然后根据quarter required的定义使用不同的q数组。

编辑

如果从1月1日、4月1日、7月1日和10月开始,下面的代码将得到季度内的剩余天数,它在各种浏览器中进行了测试,包括IE 6(尽管它使用基本的ECMAScript,因此应该可以在任何地方运行):

代码语言:javascript
复制
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);
}
票数 46
EN

Stack Overflow用户

发布于 2012-08-16 14:16:33

假设1月到3月被认为是Q1 (一些国家/公司将其财政年度与日历年分开),以下代码应该可以工作:

代码语言:javascript
复制
var today = new Date();
var quarter = Math.floor((today.getMonth() + 3) / 3);

这为您提供了:

代码语言:javascript
复制
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

至于如何获得本季度的剩余天数,它基本上是计算出下个季度的第一天,并计算出差异,类似于:

代码语言:javascript
复制
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),以便以精确的天数表示差异。

根据你对“本季度剩余天数”的实际定义,它也可能会减少一天。

但这应该是一个很好的起点。

票数 79
EN

Stack Overflow用户

发布于 2012-08-16 14:41:02

如果第一个解决方案不起作用,那么您可以将其调整为您想要的范围

代码语言:javascript
复制
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;
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11981453

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档