現在の四半期をjavascriptで取得するにはどうすればよいですか?現在どの四半期にいるかを検出しようとしています。 2。
[〜#〜] edit [〜#〜]そして、四半期に残っている日数をどのようにカウントできますか?
「*現在の現在の四半期」を決定する方法についての基準を提供していない場合、必要な基準に適応する必要があるアルゴリズムを提案できます。例えば.
// 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);
}
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つずつずれている場合もあります。
しかし、それは良い出発点であるべきです。
最初の解決策が機能しない場合は、希望する範囲に調整するだけです
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 d = new Date();
var quarter = Math.ceil(d.getMonth() / 3);
console.log(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.
function getQuarter(d) {
return Math.floor((d.getMonth()/3 % 4) + 1);
}
効率的でも読みやすいわけでもありませんが、ワンライナー風味です。
(new Date(new Date().getFullYear(), Math.floor((new Date().getMonth() + 3) / 3) * 3, 1) - new Date()) / 86400000