使用javascript获取当年的当前季度

新手上路,请多包涵

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

编辑 我如何计算本季度剩余的天数?

原文由 John Doe 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 782
2 个回答

鉴于您没有提供任何标准来确定“*我们目前处于哪个季度”,可以建议您使用一种算法来适应您需要的任何标准。例如

// 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 月 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);
}

原文由 RobG 发布,翻译遵循 CC BY-SA 4.0 许可协议

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

 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),以便以精确的天数计算差异。

它也可能相差一个,这取决于您对“本季度剩余天数”的实际定义。

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

原文由 paxdiablo 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题