使用javascript获取当前季度

如何通过javascript获取当前季度? 我试图检测我们目前的季度,例如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(); // 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); } 

假设从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),以便差异在确切的天数内。

根据您对“季度剩余天数”的实际定义,它也可能会被一个人关闭。

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

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

 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; 

取决于月份

  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(); quarter = Math.ceil(d.getMonth()/3);

它没有效率或可读性,但它具有良好的味道。

 (new Date(new Date().getFullYear(), Math.floor((new Date().getMonth() + 3) / 3) * 3, 1) - new Date()) / 86400000