web-dev-qa-db-ja.com

javascriptで現在の四半期を取得

現在の四半期をjavascriptで取得するにはどうすればよいですか?現在どの四半期にいるかを検出しようとしています。 2。

[〜#〜] edit [〜#〜]そして、四半期に残っている日数をどのようにカウントできますか?

26
John Doe

「*現在の現在の四半期」を決定する方法についての基準を提供していない場合、必要な基準に適応する必要があるアルゴリズムを提案できます。例えば.

// 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月1日から始まる場合、四半期に残っている日数を取得します。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);
}
36
RobG

1月から3月が第1四半期と見なされる場合(一部の国/企業は暦年と会計年度を分けている)、次のコードが機能するはずです。

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;

それはテストされていませんが、理論は健全です。基本的に、次の四半期に対応する日付を作成し、その日付と今日をエポックの開始以降のミリ秒に変換します。その差はミリ秒数です。

それを1日のミリ秒数で除算すると、日数に差があります。

これにより、(少なくともおおよそ)四半期の残り日数がわかります。すべてのtimesが同じ値(00:00:00)に設定されていることを確認するために、微調整する必要がある場合があります。

「四半期の残り日数」の実際の定義によっては、1つずつずれている場合もあります。

しかし、それは良い出発点であるべきです。

58
paxdiablo

最初の解決策が機能しない場合は、希望する範囲に調整するだけです

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;
5
Tom Prats

これは私のために働いた!

var d = new Date();
var quarter = Math.ceil(d.getMonth() / 3);

console.log(quarter)
2
Divya

月に依存

 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.
2
Shih-En Chou
function getQuarter(d) {
  return Math.floor((d.getMonth()/3 % 4) + 1);
}
0
Wim den Herder

効率的でも読みやすいわけでもありませんが、ワンライナー風味です。

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