39

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

編集そして、どうすれば四半期の残り日数を数えることができますか?

4

11 に答える 11

82

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日のミリ秒数で割ると、日数に差があります。

これにより、(少なくとも大まかに)四半期の残り日数がわかります。差が正確な日数になるように、すべての時刻が同じ値(00:00:00)に設定されるように微調整する必要がある場合があります。

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

しかし、それは良い出発点になるはずです。

于 2012-08-16T06:16:33.300 に答える
46

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

// 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月に開始した場合、四半期の残り日数を取得します。IE6を含むさまざまなブラウザーでテストされています(ただし、基本的な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);
}
于 2012-08-16T06:28:17.673 に答える
7

最初の解決策がうまくいかない場合は、希望する範囲に調整するだけです。

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;
于 2012-08-16T06:41:02.403 に答える
6
function getQuarter(d) {
  return Math.floor(d.getMonth()/3) + 1);
}

編集:私は%4を省略しました、完全に正しいです、クレメントに感謝します

于 2019-06-28T12:33:23.013 に答える
4

モーメントパッケージを使用できます:

モーメントパッケージを使用した質問の回答は次のとおりです。

moment().quarter()

以下は、モーメントパッケージを使用した四半期の開始日と終了日です。

四半期の開始日

moment().quarter(moment().quarter()).startOf('quarter');

日付が四半期の開始日に設定された現在の四半期を返します。

moment("2019", "YYYY").quarter(4).startOf('quarter');

「2019」年の第4四半期の開始日を返します。

moment().startOf('quarter');

今年の現在の四半期の開始日を返します。

四半期の終了日

moment().quarter(moment().quarter()).endOf('quarter');

日付が四半期終了日に設定された現在の四半期を返します。

moment("2019", "YYYY").quarter(4).endOf('quarter');

「2019」年の第4四半期の終了日を返します。

moment().endOf('quarter');

今年の現在の四半期の終了日を返します。

于 2020-07-21T08:37:28.017 に答える
3

月によって異なります

 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.
于 2012-08-16T06:02:09.983 に答える
3

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

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

console.log(quarter)

于 2018-08-01T09:30:33.990 に答える
0

それは効率的でも読みやすいものでもありませんが、ワンライナーフレーバーです。

(new Date(new Date().getFullYear(), Math.floor((new Date().getMonth() + 3) / 3) * 3, 1) - new Date()) / 86400000
于 2014-07-04T17:01:54.317 に答える
0
// Set Period Function
  SetPeriod(SelectedVal) {
    try {
      if (SelectedVal === '0') { return; }
      if (SelectedVal != null) {
        let yrf: number, mtf: number, dyf: number, yrt: number, mtt: number, dyt: number, dtf: any, dtt: any;
        let dat = new Date();
        let q = 0;
        switch (SelectedVal) {
          case '-1': // Not specify
            frm = ''; to = '';
            return;
          case '0': // As specify
            break;
          case '1': // This Month
            yrf = yrt = dat.getUTCFullYear();
            mtf = mtt = dat.getUTCMonth();
            dyf = 1; dyt = this.getDaysInMonth(mtf, yrf);
            break;
          case '2': // Last Month
            dat.setDate(0); // 0 will result in the last day of the previous month
            dat.setDate(1); // 1 will result in the first day of the month
            yrf = yrt = dat.getUTCFullYear();
            mtf = mtt = dat.getUTCMonth();
            dyf = 1; dyt = this.getDaysInMonth(mtf, yrf);
            break;
          case '3': // This quater
            q = Math.ceil((dat.getUTCMonth()) / 3);
          // tslint:disable-next-line:no-switch-case-fall-through
          case '4': // Last quater
            if (q === 0) { q = Math.ceil(dat.getUTCMonth() / 3) - 1; if (q === 0) { q = 1; } }
            yrf = yrt = dat.getUTCFullYear();
            if (q === 1) {
              mtf = 0; mtt = 2;
              dyf = 1; dyt = 31;
            } else if (q === 2) {
              mtf = 3; mtt = 5;
              dyf = 1; dyt = 30;
            } else if (q === 3) {
              mtf = 6; mtt = 8;
              dyf = 1; dyt = 30;
            } else if (q === 4) {
              mtf = 9; mtt = 11;
              dyf = 1; dyt = 31;
            }
            break;
          case '6': // Last year
            dat = new Date(dat.getUTCFullYear(), 0, 1);
          // tslint:disable-next-line:no-switch-case-fall-through
          case '5': // This year
            yrf = yrt = dat.getUTCFullYear();
            mtf = 0; mtt = 11;
            dyf = 1; dyt = 31;
            break;
        }

        // Convert to new Date
        dtf = new Date(yrf, mtf, dyf);
        dtt = new Date(yrt, mtt, dyt);
        console.log('dtf', dtf);
        console.log('dtt', dtt);

      }
    } catch (e) {
      alert(e);
    }
  }



// Get Day in Month
  getDaysInMonth = (month: number, year: number) => {
    return new Date(year, month + 1, 0).getDate();
  }
于 2019-11-15T02:42:25.240 に答える
0

私の場合、四半期は入力された四半期の開始日(月、日)と四半期の期間(3、6)によって異なります。

function getCurrentQuarter(startDateString, quarterDuration) {
    var startDate = new Date(startDateString)
    // default order of months
    var months = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
    let startMonth = startDate.getMonth() + 1
    let startMonthIndex = months.indexOf(startMonth)
    // rotate months to get start month first
    if (startMonthIndex != 0) {
        var monthsNew = months.slice(startMonthIndex, months.length)
        months = monthsNew.concat(months.slice(0, startMonthIndex))
    }
    
    let today = new Date()
    let thisMonth = today.getMonth() + 1
    let thisMonthIndex = months.indexOf(thisMonth) + 1
    // compare with date
    let thisDay = today.getDate()
    let startDay = startDate.getDate()
    if (thisDay < startDay) {
        // this is previous month
        if (thisMonthIndex == 1) {
            thisMonthIndex = 12
        } else {
            thisMonthIndex = thisMonthIndex - 1
        }
    }
    // find quarter
    let thisQuarter = Math.ceil(thisMonthIndex / quarterDuration)

    return thisQuarter
}

getCurrentQuarter( '2021-03-15'、3)

于 2021-03-02T07:47:40.893 に答える
-1

これが私の見解です

var todayDate = new Date(new Date().setUTCHours(0, 0, 0, 0));
var currentQuarter = Math.floor(todayDate.getMonth() / 3);
var firstDate = new Date(
  new Date(todayDate.getFullYear(), currentQuarter * 3, 1).setUTCHours(0, 0, 0, 0)
);
var endDate = new Date(
  new Date(
    firstDate.getFullYear(),
    firstDate.getMonth() + 3,
    0
  ).setUTCHours(0, 0, 0, 0)
);
console.log(endDate)

于 2021-05-25T09:21:38.897 に答える