wake-up-neo.com

Holen Sie sich das aktuelle Quartal in Jahr mit Javascript

Wie bekomme ich das aktuelle Quartal, in dem wir mit Javascript sind? Ich versuche herauszufinden, in welchem ​​Quartal wir uns gerade befinden, z. 2.

EDITUnd wie kann ich die Anzahl der verbleibenden Tage im Quartal zählen?

22
John Doe

Da Sie keine Kriterien angegeben haben, um herauszufinden, in welchem ​​Quartal "* wir sind derzeit" festgelegt sind, kann ein Algorithmus vorgeschlagen werden, den Sie dann an die von Ihnen benötigten Kriterien anpassen müssen. z.B.

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

Als lauffähiges Snippet und einschließlich des Jahres:

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')}`);

Sie können dies dann an die verschiedenen Finanz- oder Kalenderquartale anpassen. Sie können auch tun:

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)];
}

Verwenden Sie dann unterschiedliche q-Arrays, abhängig von der Definition des erforderlichen Viertels.

Bearbeiten

Die folgenden Tage erhalten die verbleibenden Tage in einem Viertel, wenn sie am 1. Januar, April, Juli und Oktober beginnen. Sie wurde in verschiedenen Browsern getestet, einschließlich IE 6 (obwohl sie ECMAScript mit Grundfunktionen verwendet, sollte es jedoch überall funktionieren):

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);
}
34
RobG

Unter der Annahme, dass Januar bis März als erstes Quartal betrachtet werden (einige Länder/Unternehmen trennen ihr Geschäftsjahr von ihrem Kalenderjahr ab), sollte der folgende Code funktionieren:

var today = new Date();
var quarter = Math.floor((today.getMonth() + 3) / 3);

Das gibt Ihnen:

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

Um die verbleibenden Tage im Quartal zu erhalten, müssen Sie zunächst den ersten Tag des nächsten Quartals ermitteln und den Unterschied ermitteln.

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;

Das ist nicht getestet, aber die Theorie ist solide. Erstellen Sie im Grunde ein Datum, das dem nächsten Quartal entspricht, konvertieren Sie es und heute in Millisekunden seit dem Beginn der Epoche, dann ist die Differenz die Anzahl der Millisekunden.

Teilen Sie dies durch die Anzahl der Millisekunden an einem Tag, und Sie haben die Differenz in Tagen.

Das gibt Ihnen (zumindest ungefähr) die Anzahl der verbleibenden Tage im Quartal. Möglicherweise müssen Sie eine Feinabstimmung vornehmen, um sicherzustellen, dass alle Zeiten auf den gleichen Wert (00:00:00) eingestellt sind, sodass die Differenz in exakten Tagen liegt.

Abhängig von Ihrer tatsächlichen Definition der "verbleibenden Tage im Quartal" kann es auch um eins versetzt sein.

Aber es sollte ein guter Ausgangspunkt sein.

53
paxdiablo

wenn die erste Lösung nicht funktioniert, können Sie sie einfach an den gewünschten Bereich anpassen

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

Das hat für mich funktioniert! var d = new Date(); quarter = Math.ceil(d.getMonth()/3);

2
Divya

Abhängig vom Monat

 var date = new Date();     
 var quarter =  parseInt(date.getMonth() / 3 ) + 1 ;

Abhängig vom Datum

 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

Es ist nicht effizient oder lesbar, aber es hat einen Oneliner-Geschmack.

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