Holen Sie sich das aktuelle Quartal im Jahr mit Javascript

Lesezeit: 7 Minuten

Benutzer-Avatar
John Doe

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

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

  • Was sind Ihre Kriterien für Quartal? In einigen Fällen sind sie Januar bis Dezember, andere Juli bis Juni des folgenden Jahres und so weiter. Und sie stimmen möglicherweise nicht mit Monaten überein.

    – RobG

    16. August 2012 um 6:12 Uhr

  • Ungefähr ist in Ordnung, wenn es ein freier Tag ist, ist es nicht das Ende der Welt, aber wenn es einen anderen Weg gibt, das aktuelle Quartal zu erhalten, ohne vom Monat abhängig zu sein, wäre das ideal.

    – John Doe

    16. August 2012 um 6:14 Uhr

  • Dies kann Ihnen helfen [Stack answer with fiddle][1] [1]: stackoverflow.com/a/20989200/2837412

    – Nishchit

    8. Januar 2014 um 7:17 Uhr

Benutzer-Avatar
paxdiablo

Unter der Annahme, dass Januar bis März als Q1 gelten (einige Länder/Unternehmen trennen ihr Geschäftsjahr von ihrem Kalenderjahr), 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 ermitteln, müssen Sie im Grunde den ersten Tag des nächsten Quartals ermitteln und die Differenz berechnen, etwa so:

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 ungetestet, 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 Beginn der Epoche, dann ist die Differenz die Anzahl der Millisekunden.

Teilen Sie das 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 alles vorhanden ist mal werden auf den gleichen Wert (00:00:00) gesetzt, sodass die Differenz in genauen Tagen liegt.

Es kann auch um eins abweichen, abhängig von Ihrer tatsächlichen Definition von “verbleibende Tage im Quartal”.

Aber es sollte ein guter Ausgangspunkt sein.

  • Angesichts der Tatsache, dass das OP davon ausgeht, dass August in Q2 liegt, ist es unwahrscheinlich, dass Januar bis März Q1 ist. Eine fest codierte Lösung funktioniert jedoch.

    – RobG

    16. August 2012 um 6:36 Uhr

  • @Rob, ich habe das Beispiel 2 als nur ein Viertel von uns gesehen könnte be in. Ich glaube nicht, dass das OP angibt, dass es dem aktuellen Monat entspricht, in dem diese Frage gestellt wurde (August).

    – paxdiablo

    16. August 2012 um 6:48 Uhr


  • Sicherlich brauchen Sie einen Math.floor um Ihr Ergebnis herum, um das Viertel zu erhalten? Außerdem gibt es keine Variable namens “jetzt”, ich schätze, Sie wollten stattdessen “heute” verwenden?

    – lee_mcmullen

    16. Oktober 2013 um 8:42 Uhr

  • @lee_mcmullen, daher der “ungetestete” Kommentar 🙂 Herzlichen Glückwunsch, dass Sie die erste Person sind, die das abgeholt hat today/now Fehler in über einem Jahr, haben beide Probleme basierend auf Ihren Vorschlägen behoben.

    – paxdiablo

    16. Oktober 2013 um 8:53 Uhr

  • @SteveSeeger, ich bin mir nicht sicher, wovon du da redest, das Quartal wird allein durch den Monat diktiert. Die Sommerzeit scheint hier nicht im Geringsten relevant zu sein, entweder Sie sind in einem Monat oder nicht. Vielleicht könntest du das näher erläutern?

    – paxdiablo

    11. August 2018 um 13:55 Uhr

Benutzer-Avatar
RobG

Da Sie keine Kriterien angegeben haben, um zu bestimmen, in welchem ​​Quartal „*wir uns gerade befinden“, 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 ausführbares Snippet und mit Jahreszahl:

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

Diese können Sie dann entsprechend den jeweiligen Finanz- oder Kalenderquartalen anpassen. Sie können auch Folgendes 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)];
}

Dann anders verwenden q Arrays abhängig von der Definition des erforderlichen Quartals.

Bearbeiten

Das Folgende erhält die verbleibenden Tage in einem Quartal, wenn sie am 1. Januar, April, Juli und Oktober beginnen. Es wurde in verschiedenen Browsern getestet, einschließlich IE 6 (obwohl es überall funktionieren sollte, da es grundlegendes ECMAScript verwendet):

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

  • $NaN? Ich habe keine Ahnung, wie Sie das bekommen, der obige Code wurde in Firefox und IE 9 getestet, es ist einfaches ECMAScript, hat also nichts mit jQuery zu tun. All dies sollte in fast jedem Browser funktionieren, der jemals Javascript unterstützt hat, sicherlich alles seit und einschließlich IE und NN 4.

    – RobG

    17. August 2012 um 2:29 Uhr

  • ja ja, es ist cool, es war ein Problem mit IE 6, und leider kann der Client, für den ich das baue, nicht “aktualisieren”, um Chrome oder so etwas zu mögen.

    – John Doe

    17. August 2012 um 15:59 Uhr


  • Ihr Beispiel daysleftInquarter ist nicht korrekt, es gibt immer wieder 60 zurück, wenn ich den aktuellen Monat passiere

    – John Doe

    17. August 2012 um 16:32 Uhr

  • @Simon_Weaver – hat ein ausführbares Snippet mit dem Jahr hinzugefügt.

    – RobG

    6. November 2018 um 23:03 Uhr


  • @Simon_Weaver – die neue Funktion kehrt zurück [y,m]. 😉 Die Formatierung des eigentlichen Ausdrucks ist dem Benutzer überlassen, wenn Sortierbarkeit erforderlich ist, passt Jahr/Quartal. Meine Präferenz ist 2019Q1, was ziemlich ISO-mäßig ist, also scheinen die USA wahrscheinlich etwas anderes zu bevorzugen, wie Q1’19 oder Q1/19 oder ähnliches, das nicht lexikalisch sortiert wird. 🙁

    – RobG

    6. November 2018 um 23:51 Uhr

Benutzer-Avatar
Wim den Herder

function getQuarter(d) {
  return Math.floor(d.getMonth()/3) + 1);
}

EDIT: Ich habe %4 weggelassen, ganz richtig, danke Clement

  • % 4 wird nicht benötigt

    – Clemens

    19. Februar 2021 um 14:40 Uhr

Benutzer-Avatar
Tom Prats

Wenn die erste Lösung nicht funktioniert, können Sie sie einfach auf den gewünschten Bereich einstellen

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;

Benutzer-Avatar
Shih En Chou

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.

Benutzer-Avatar
Tron

Sie können verwenden Moment Paket:

Die Antwort auf Ihre Frage mit dem Momentpaket lautet:

moment().quarter()

Nachfolgend sind die Start- und Enddaten eines Quartals mit dem Moment-Paket aufgeführt:

STARTDATUM DES QUARTALS

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

Würde das aktuelle Quartal zurückgeben, wobei das Datum auf das Startdatum des Quartals festgelegt ist.

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

Würde das Startdatum des 4. Quartals des Jahres “2019” zurückgeben.

moment().startOf('quarter');

Würde das Startdatum des aktuellen Quartals des aktuellen Jahres zurückgeben.

ENDDATUM DES QUARTALS

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

Würde das aktuelle Quartal zurückgeben, wobei das Datum auf das Enddatum des Quartals festgelegt ist.

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

Würde das Enddatum des 4. Quartals des Jahres “2019” zurückgeben.

moment().endOf('quarter');

Würde das Enddatum des aktuellen Quartals des aktuellen Jahres zurückgeben.

Benutzer-Avatar
Adi

Das hat bei mir funktioniert!

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

console.log(quarter)

  • Genau das, wonach ich suche, da ich das tatsächliche Quartal haben wollte, nicht das US-Geschäftsjahr. Vielen Dank!

    – Mayer Spitz

    8. Februar 2019 um 15:28 Uhr

  • Da der Monat nullbasiert ist, müssen Sie 1 hinzufügen, damit dies richtig funktioniert. [0,1,2,3,4,5,6,7,9,10,11].map(Monat => Math.ceil(Monat/3)) === [0, 1, 1, 1, 2, 2, 2, 3, 3, 4, 4]

    – Patrick McElhaney

    1. Juli 2019 um 13:05 Uhr


1252800cookie-checkHolen Sie sich das aktuelle Quartal im Jahr mit Javascript

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy